我有一个实用程序对话框(非模态和置顶),应该在使用应用程序时始终可访问(比如在使用应用程序时可以用来做笔记的对话框)即使模态对话框被显示。
应用程序的其余部分不能更改。
这是否可能?我该怎么做?
我有一个实用程序对话框(非模态和置顶),应该在使用应用程序时始终可访问(比如在使用应用程序时可以用来做笔记的对话框)即使模态对话框被显示。
应用程序的其余部分不能更改。
这是否可能?我该怎么做?
当调用ShowModal
时,所有现有的顶层窗口都被禁用。这就是模态工作的原理。如果您有一个可以进行交互的窗口,您只需要重新启用它即可。
例如,您可以将以下内容添加到您的实用程序窗口中:
type
TMyUtilityForm = class(TForm)
protected
procedure WMEnable(var Message: TWMEnable); message WM_ENABLE;
end;
....
procedure TMyUtilityForm.WMEnable(var Message: TWMEnable);
begin
if not Message.Enabled then
EnableWindow(Handle, True);
inherited;
end;
这将确保您的实用程序窗口永远不会被禁用。
if not IsWindowEnabled(Handle)
,因为否则它看起来像是一个无限循环,即使 EnableWindow(Handle, True)
可能不会导致发送 WM_ENABLE
消息,如果窗口已经启用。 - Thijs van Dien