Delphi XE2,vcl样式重新创建窗口句柄

时间:2013-04-09 06:37:30

标签: delphi delphi-xe2 vcl-styles

在运行时应用新样式后,我的应用程序的MainForm会创建一个新的窗口句柄 - 有没有办法停止此操作或重新分配句柄,因为我得到了一大堆以下错误:

'系统错误。代码:1400。无效的窗口句柄'

有没有办法操纵强制分配新句柄的过程?

我解决了这个问题:

我的主要表单创建了一个从未显示的看不见的'帮助'表单,但它确实有可视组件 - 它在尝试重绘这些可视组件时抛出了句柄错误,因此我用对象替换了相关组件(注意我最初没有写这段代码。)

1 个答案:

答案 0 :(得分:5)

无法避免重新创建窗口句柄。相反,覆盖窗口的CreateWndDestroyWnd方法,以便在重新创建窗口时收到通知。

另外,避免对可能被破坏的窗口句柄保持持久引用。相反,每次需要时都要阅读Handle属性。然后,您将不必注意通知。

请注意从不同的线程中读取Handle,因为它可能导致窗口与错误的线程关联。将需要与VCL窗口交互的任何代码包装到您通过SynchronizeQueue调用的方法中。