【发布时间】:2020-08-11 20:17:24
【问题描述】:
Delphi documentation 将TApplication.OnMessage Event 定义为TMessageEvent,即procedure (var Msg: TMsg; var Handled: Boolean) of object;
但是,在 Delphi 10.4 中,我在对象检查器中双击 ApplicationEvents1 的 OnMessage 字段以插入 OnMessage 事件处理程序,然后我得到以下代码:
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
end;
您注意到TMsg 和tagMSG 之间的区别了吗?这是BUG吗?
【问题讨论】:
-
TMsg = tagMSG,它们是同一类型。对象检查器依赖于 RTTI,它不区分声明的别名与它们所别名的类型。在这种情况下,TMessageEvent的声明确实使用了TMsg别名,但它所指的实际类型是tagMSG,这是 RTTI 看到的。 -
它们完全一样。如果您在上面的 sn-p 中按住 ctrl-单击
tagMSG,您将被带到 Windows.pas,其中定义了tagMSG记录类型。在下面的行中,您会找到TMsg = tagMSG。所以它们完全一样。 -
那么为什么会有两种不同的面额?
-
@user1580348:
tagMSG可以匹配the Win API declaration。TMsg之所以存在,是因为它听起来更像帕斯卡。 -
@RemyLebeau 不要责怪 Delphi 自 1996 年以来一直试图对齐事物并使它们更加有序。相比之下,我对以小写字母开头的标识符(如
tagMSG)可以也按类型。
标签: delphi eventhandler delphi-10.4-sydney