这个问题比较有趣,跟大家分享一下吧。

问题来源于昨天要改的一个bug。其表现大概是这样的:

在钢筋中打开工程3,在对量中对比工程3和工程4。然后在对量中使用“定位到GGJ”的功能,能够正常应用到工程3(审核)。接着在钢筋中将“工程3”另存为“工程31”,这个时候在对量中使用应用到GGJ的时候,系统没有任何反应。既不告诉不能定位,也没弹出定位列表,但是对量软件最小化了。

这说明在钢筋中另存为后,对量使用“定位到GGJ”时,钢筋有响应,但是这个响应有问题。这与我们的直观想象不同,因为我们“定位到GGJ”的原理是首先是通过审核工程名或者送审工程名来找窗体,判断这个工程是否在钢筋软件中打开。那么,一旦另存为之后,我们应该找不到窗体才对。(这里需要注意的是,钢筋中将“工程3”另存为“工程31”之后是相当于改名了,但是对量中还是“工程3”)。

通过跟代码,发现在“另存为…”之前,用“工程3”的名字找到的窗体的句柄是986482,“另存为…”之后,用“工程3”找到的窗体的句柄是983638。

这是什么原因呢?难道是“另存为…”的时候又产生了一个新的窗体?

为了验证一下,看了钢筋软件中”SaveAs”的代码,发现它其实就是将“工程3”改名为“工程31”然后后再复制一份以“工程3”的名字保存。所以这个过程不可能创建新的窗体。

后面想到,既然它是一个窗体,那么我何不用spy++查看一下,看是不是真的存在一个这样的窗体,一查才发现,原来真有一个这样的窗体,但又没有一个这样的窗体。这是为何?真相就在下面的图中。

图1 另存为…之前的图

图2 另存为…之后的图

从上面的图就可以看到,原来是一直被我们忽视的TApplication类在作怪。“另存为…”之后找到的窗体不是我们想要的主窗体而是TApplication的实例。TApplication是Delphi中用来跟windows进行交互的东东,每个delphi编写的程序在运行时都会有TApplication实例Application,而且,它的名字跟主窗体一样,并且修改主窗体的名字不会改变Application的名字,并且它排在MainForm的后面,那么按Caption递归查询子窗体的时候查不到它,但如果“另存为…”之后再按Caption递归查询子窗体的时候就一定会查到它,除非你把程序关了。

找到原因所在,写了一个按照Caption和类名查询窗体的方法,一试,“另存为…”之后再定位时果然给出了“审核工程未打开,是否打开?”的提示。

转载于:https://www.cnblogs.com/superhuake/archive/2012/02/24/2366494.html

另存为后通过原来的名字还能找到窗体的问题相关推荐

  1. 荣耀升级android版本最好用,荣耀20PRO:升级MagicUI3.1后,凭什么感觉还能再战一年?...

    荣耀20PRO:升级MagicUI3.1后,凭什么感觉还能再战一年? 2020-06-07 11:01:47 3点赞 0收藏 0评论 作为荣耀数字系列的老用户,去年的荣耀20PRO使用了近大半年了,华 ...

  2. Android异种机型系统适配:application定义的app名字和安装到手机后桌面显示app名字不一致

    Android异种机型系统适配:application定义的app名字和安装到手机后桌面显示app名字不一致 这种情况在个别国内稀奇古怪定制化的Android机型上会出现.正常情况下,Android的 ...

  3. 后疫情时代,便利店还好吗?

    便利店,都市生活的一盏长明灯. 没有夫妻老婆店那样接地气,也没有商超那般琳琅满目.便利店作为城市最末端毛细血管的零售业态,总是显得气质过于疏离. 但不知何时起,便利店已经拥有了高于零售.高于商业的精神 ...

  4. C4D多通道保存不出来,oc保存psd没有多通道图层,图片查看器将图像另存为后无多通道图层。

    <C4D的十万个为什么>首发于 公众号:苦七君 免费搜索查看更多问题:kuqijun.com 问题: C4D多通道保存不出来,oc保存psd没有多通道图层,图片查看器将图像另存为后无多通道 ...

  5. 裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职

    本文转载自:裸辞三个月后,哭诉亲身经历,建议还想换工作的Java程序员不要辞职 有位朋友私信我: 我从事Java工作,今年受了很大的影响,我们公司采取了节源措施,给在岗的每位员工只发底薪.底薪太少了, ...

  6. 内存卡损坏后里面的文件数据还能恢复吗

    内存卡损坏后里面的文件数据还能恢复吗 最近遇上一个十分难缠的用户,怎么说呢,这个人就是特别的麻烦,总是喜欢条条框框的跟我较劲,总是说什么他们大公司怎么怎么样,怎么怎么规定严格,然后与我们怎么怎么的不同 ...

  7. mt6735 Audio framework]音量警告提示框选择OK,重启后再增大音量希望还会弹出音量警告提示框

    [DESCRIPTION] 目前的做法是: 音量警告提示框选择OK,重启后就不会再弹出警告提示框, 除非恢复出厂设置 如果希望重启后再增大音量希望还会弹出音量警告提示框 请参考如下修改: [SOLUT ...

  8. 长大后的你,是否还记住你的初心?

    长大后的你,是否还记住你的初心?@TOC 小时分咱们盼望着长大,长大了咱们思念小时分.长大后的咱们,情感丰富了,纠结多了,高兴少了,心大了,自己小了,人多了,爱少了,打闹少了,孤单多了,欢笑少了,苦笑 ...

  9. php一个星期没找到工作怎么办_高校开学推迟,校园招聘遥遥无期,还没找到工作的应届生怎么办?...

    随着一些特殊事件的发生,高校开学时间也随之推迟,一些学生的计划也被意外事件打乱,部分还没有找到工作的应届生此时面临了比较尴尬的情况.高校开学推迟,校招遥遥无期,秋招没有找到工作的应届生怎么办? 大学应 ...

最新文章

  1. 你面试稳了!通关LeetCode刷题完整攻略,省时又高效
  2. 【数学建模】线性代数知识汇总,参加建模大赛的小伙伴看过来,它会是你的最优选
  3. Innodb存储引擎的特性(1).
  4. 淘宝网商品管理?技术 ?
  5. 编写第二个Spring程序——AOP实现
  6. 用Canvas实现一些简单的图片滤镜
  7. spring+hibernate+Struts2 整合(全注解及注意事项)
  8. linux用usermod修改密码,Linux笔记(usermod命令,用户密码管理,mkpasswd)
  9. 只可顺守不可逆取书法_坚持练书法10年以上,会怎么样?
  10. 刪除主表中不存在記錄的從表資料
  11. 第6讲 Zend 整合数据库
  12. 模拟退火算法_Simulated Annealing 模拟退火算法
  13. 毕设-基于SSM高校后勤管理系统
  14. 数字孪生-输电铁塔及线路的结冰、融化
  15. 网页服务器阿帕奇怎么启动服务,阿帕奇服务器使用教程
  16. java爬取国家应急平台漏洞公告数据
  17. Base64 密码加密解密
  18. 解决RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 踩过的坑(配置环境:linux+anaconda3+pytorch ...)
  19. python爬京东延迟加载_python大规模爬取京东
  20. 【Linux】linux的vim文件怎么全选复制、粘贴

热门文章

  1. 使用RTSO-9003拓展板的TX2镜像备份与恢复
  2. select实现connect超时连接
  3. linux栈溢出漏洞,PWN简单栈溢出漏洞获取shell | kTWO-个人博客
  4. 我的十年总结——送给刚毕业的年轻朋友们(转)
  5. 非因解读 | RPPA技术助力前列腺癌血清来源细胞外囊泡中癌症标志物研究
  6. 强人工智能指人可能会被人工智能取代或者会被人工智能威胁
  7. 安卓手机录屏怎么弄?分享一个好用的方法
  8. 分光光度计测量误差四大原因(附加仪器检测标准)SKJDN
  9. 0到1 ctfer: SQL注入-2
  10. 什么是HOOKED上瘾模型?如何用其提升用户活跃和粘性?