- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
一个特定的 VCL 应用程序崩溃,这种情况很少见,而且显然是自发的,我强烈怀疑这是因为正在重新创建主窗体的窗口句柄以响应操作系统的某些外部触发。
我确实知道,如果主窗体的窗口句柄发生变化,那么麻烦肯定会随之而来(因为后台线程向该句柄发送消息)。
但我想知道如何在我着手进行代码更改以修复它之前重现此错误,如果只有这样我可以确认这是崩溃的合理原因,症状与报告的相符,并且代码更改确实修复了它。 (此外,如果操作系统无法触发对 TCustomForm.RecreateWnd
的调用,我需要为崩溃找到一些其他解释。是的,我可以将 CM_RECREATEWND
发布到主要形式,但这只是在回避问题。)
(我知道从后台线程向 VCL 线程发布消息的正确方法是使用 AllocateHWnd
创建一个纯粹为此目的的隐藏消息窗口 - 这是我提出的修复方法。)
我在 TCustomListView
的后代中看到了类似的错误,其中 RecreateWnd
是通过将桌面样式从 Windows XP 更改为 < em>Windows 经典版。但是我还没有找到这样的方法来触发 TCustomForm
上的 RecreateWnd
。 (我花了相当多的时间通读 VCL 代码,我一定遗漏了一些东西。)
总结:
在操作系统的什么刺激下,VCL 最终在 TCustomForm
上调用 RecreateWnd
? (我对 Windows 7 特别感兴趣,如果它有所作为的话。)
如果操作系统有这样的刺激,我可以证明它是否导致观察到的症状。如果确实没有,那么我可以证明窗口娱乐不是原因。
最佳答案
如果窗体拥有或父级为另一个正在被销毁的窗口,则 Windows 将销毁您的窗体。
这将导致您的表单句柄被破坏。
但是由于您的表单仍然存在,Delphi 将在下次重新创建句柄。
关于windows - 什么外部事件触发 TCustomForm.RecreateWnd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400973/
如您所知,窗口控件(包括表单)的窗口句柄被认为是 volatile 的。也就是说,设置某些属性可能会导致控件销毁其窗口句柄,然后重新创建(有很多该技术的示例,搜索 StdCtrls 查找 Recrea
一个特定的 VCL 应用程序崩溃,这种情况很少见,而且显然是自发的,我强烈怀疑这是因为正在重新创建主窗体的窗口句柄以响应操作系统的某些外部触发。 我确实知道,如果主窗体的窗口句柄发生变化,那么麻烦肯定
我需要一个表单来禁用菜单关闭按钮(并且还禁用使用 Alt-F4 关闭),因此我使用了 CS_NOCLOSE类(class)风格。如果我在 CreateParams 中设置它,它会按预期工作: proc
我是一名优秀的程序员,十分优秀!