gpt4 book ai didi

Delphi 自定义消息处理程序

转载 作者:行者123 更新时间:2023-12-03 15:37:35 25 4
gpt4 key购买 nike

当用户双击 dbgrid 时,我会显示一个非模态表单。

当他们关闭该表单时,我想刷新网格。

为了实现这一目标,我尝试了以下方法:

1 - 定义自定义消息常量:

const
WM_REFRESH_MSG = WM_USER + 1; //defined in a globally available unit

2 - 在我的非模态表单的 OnClose 事件中,我有这个:

procedure TMyNonModalForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
PostMessage(Self.Handle,WM_REFRESH_MSG,0,0);
end;

3 - 在保存 dbGrid 的表单的私有(private)声明中,我有以下内容:

procedure OnRefreshRequest(var Msg: TMessage); message WM_REFRESH_MSG;

...

procedure TMyFormWithADBGrid.OnRefreshRequest(var Msg: TMessage);
begin
RefreshGrid;
end;

完成这些操作后,PostMessage 可以正常触发,但 OnRefreshRequest 过程永远不会运行。我做错了什么?

最佳答案

请注意,WM_USER 不是您自己的消息所依据的正确常量,除非您正在编写直接从 TWinControl 继承的自定义控件。请改用 WM_APP。

此外,使用 UM_ 代替 WM_ 来表示用户消息被认为是很好的风格,因为该前缀应该为 Windows 头文件保留。

关于Delphi 自定义消息处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/860119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com