当另一个表单以模态方式显示时,如何制作未禁用的表单?

jpf*_*ius 8 delphi vcl delphi-xe

我有一个实用程序对话框(非模态和保持在顶部),在使用应用程序时应始终可访问(即使是模态对话框,也可以使用可用于在处理应用程序时记笔记的对话框)显示.

其余的应用程序无法更改.

可能吗?我该怎么办呢?

Dav*_*nan 16

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;
Run Code Online (Sandbox Code Playgroud)

这将确保永远不会禁用您的实用程序窗口.

  • +1.大卫总是知道事情的运作方式!:) (2认同)
  • 我会添加`if not IsWindowEnabled(Handle)`但是,因为否则它开始看起来像一个无限循环,即使`EnableWindow(Handle,True)`可能不会导致发送`WM_ENABLE`以防万一窗口已启用. (2认同)