我一直在使用TFormOnActivate事件,让我有机会在我的应用程序启动后立即显示一个对话框。我希望主窗体已经加载并可见。有什么好方法吗?

我发现OnActivate可以正常工作,除非WindowState的形式为wsMaximized

过去,我以各种方式实现了我想要的目标,但是我希望有更好的方式。

这是对我有用的东西:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle:=OnIdle;
end;

procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);
begin
  Application.OnIdle:=nil;
  form2:=TForm2.Create(Application);
  form2.ShowModal;
end;

有没有更好的办法?

最佳答案

在MainForm的OnShow事件中,您可以执行以下操作之一以在允许MainForm首先完成完全显示自身的延迟之后显示对话框:

  • 启动一个短计时器。
  • PostMessage()向自己发送自定义窗口消息。
  • 使用TThread.CreateAnonymousThread()TTask调用TThread.Queue()
  • 使用TThread.ForceQueue()(仅限10.2 Tokyo和更高版本)。
  • 关于delphi - 我的应用程序主窗体可见后,如何使对话框立即发生?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6203090/

    10-09 09:33