SysUtils.LoadPackage 替换 Aplication.OnMessage 处理程序

Dau*_*ils 0 delphi delphi-10.2-tokyo

我有一个主窗体,在其中设置事件的处理程序Application.OnMessage。(该处理程序的代码放置在主窗体中)。然后,在运行程序时,可以调用SysUtils.LoadPackage加载一些 bpl 包。加载后,其处理程序Application.OnMessage发生更改。

我找不到这是做什么的。Application.OnMessage :=至少包中没有正确的此类代码。

另一件事:在调试器中,在 LoadPackage 之前,我看到 OnMessage 处理程序描述为Main.TMainForm.AppMessage。所有其他处理程序(例如 OnMinimize、OnModalBegin 等)均为 nil。在 LoadPackage 之后,所有事件都有处理程序,描述为Vcl.AppEvnts.TMultiCaster.DoMessage

Rem*_*eau 5

有问题的包使用 的内部实例TApplicationEvents,它是一个多播器,它拦截TApplication事件并将它们委托给TApplicationEvents应用程序中的每个实例,允许多个表单、组件等接收相同的应用程序事件,而无需踩在彼此的脚趾上尝试分配处理程序直接到TApplication

因此,为了与包共存,解决方案是TApplicationEvents向您添加一个MainForm处理程序并为其OnMessage事件分配一个处理程序,而不是TApplication.OnMessage直接为该事件分配一个处理程序。