Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 对于';s 0?_Delphi_Postmessage - Fatal编程技术网

Delphi 对于';s 0?

Delphi 对于';s 0?,delphi,postmessage,Delphi,Postmessage,我有一个带有HWND句柄的数据模块,用于接收PostMessage调用 句柄在DataModuleCreate中的分配如下(未定义TTNONVISUAL): 数据模块也用于定义TTNONVISUAL的非可视程序中 datamodule中的WindProc包含在{$IFNDEF TTNONVISUAL}中,因此在非可视程序中没有WindProc且FHWND=0 在该程序中,对该0句柄进行PostMessage调用是否安全 注意:PostMessage不发送任何附加数据: 后消息(FHWND,WM\

我有一个带有HWND句柄的数据模块,用于接收PostMessage调用

句柄在DataModuleCreate中的分配如下(未定义TTNONVISUAL):

数据模块也用于定义TTNONVISUAL的非可视程序中

datamodule中的WindProc包含在{$IFNDEF TTNONVISUAL}中,因此在非可视程序中没有WindProc且FHWND=0

在该程序中,对该0句柄进行PostMessage调用是否安全

注意:PostMessage不发送任何附加数据:
后消息(FHWND,WM\u SYNC\u PROGRESS,0,0)
WM_SYNC_PROGRESS是WM_USER+111,没有其他WM_SYNC_PROGRESS处理程序。

[当为句柄传递NULL时,它不是指变量NULL,而是指值
0
]:

该函数的行为类似于使用 dwThreadId参数设置为当前线程的标识符

因此,将消息发布到
0
,有着独特的意义,如果您真的想让消息被遗忘,您不应该只允许这样做。如果是这种情况,您最好检查句柄是否为
0
,而不要发布消息

但请注意,即使在非可视化应用程序中,创建窗口也是完全合法的。这样的句柄用于向发送消息。它们不一定指向可见的窗口。事实上,这正是我们的目的。它用于非可视控件(如TTimer),毕竟这些控件需要能够接收消息。

[当为句柄传递NULL时,它不是指变量NULL,而是指值
0
]:

该函数的行为类似于使用 dwThreadId参数设置为当前线程的标识符

因此,将消息发布到
0
,有着独特的意义,如果您真的想让消息被遗忘,您不应该只允许这样做。如果是这种情况,您最好检查句柄是否为
0
,而不要发布消息


但请注意,即使在非可视化应用程序中,创建窗口也是完全合法的。这样的句柄用于向发送消息。它们不一定指向可见的窗口。事实上,这正是我们的目的。它用于非可视控件(如TTimer),毕竟这些控件需要能够接收消息。

您可能需要创建自己的包装函数来实现这一点,而不是在代码中的多个位置放置大量ifs。您可能需要创建自己的包装函数来实现这一点,而不是在代码中的多个位置放置大量ifs。
{$IFNDEF TTNONVISUAL}
FHWND := AllocateHWND(WindProc);
{$ELSE}
FHWND := 0;
{$ENDIF}