【发布时间】:2012-07-20 08:32:57
【问题描述】:
我想检测何时创建了新表单。
现在我使用Screen.ActiveFormChange 事件并检查Screen.CustomForms 中的新表单,但ActiveFormChange 在表单的OnShow 事件之后被触发。
我想在OnShow 被解雇之前检测到表单。有没有办法在不修改Vcl.Forms 单元的情况下做到这一点?
我想检测所有表单(还有 Delphi 模态消息等),因此无法从自定义类继承所有表单(如果我错了,请纠正我)。
或者,是否可以检测到某个TComponent.FComponents 列表中添加了新组件?
【问题讨论】:
-
通常您可以控制表单的创建,为什么“需要”检测?
-
并非如此。如果调用 ShowMessage,对话窗口会在 Dialogs 单元内的某处创建。
-
您的代码正在调用 showmessage,对吗?所以你有控制权......你可以为此创建一个包装函数。 (DetectShowMessage 或类似的东西)
-
我认为您需要使用类助手来破解该私有方法
-
Mike Lischke 的
TThemeManager使用了一系列技术来检测程序中的新表单。 (它必须了解新的表单,这样它才能检测其组件的绘制例程并应用 XP 主题。)可能值得检查该代码以了解它是如何完成的。