Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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 XE-如何在mdi应用程序启动时显示对话框窗体?_Delphi_Delphi Xe - Fatal编程技术网

DELPHI XE-如何在mdi应用程序启动时显示对话框窗体?

DELPHI XE-如何在mdi应用程序启动时显示对话框窗体?,delphi,delphi-xe,Delphi,Delphi Xe,我们有Delphi XE MDI项目。我们需要在MDI主窗体创建并显示之后,在应用程序启动时打开一个对话框窗体(具有bsDialog属性的窗体)。您可以向窗体的OnShow事件添加一些内容,但该对话框将在主窗体实际可见之前显示。因此,您需要延迟对话框的显示,直到主窗体实际可见为止 我确信还有其他方法可以做到这一点,但我向TApplication.OnIdle添加了一个处理程序,并在那里显示了对话框。显然,您需要在主窗体中使用布尔标志,以确保对话框只显示一次。使用TApplicationEvent

我们有Delphi XE MDI项目。我们需要在MDI主窗体创建并显示之后,在应用程序启动时打开一个对话框窗体(具有bsDialog属性的窗体)。

您可以向窗体的
OnShow
事件添加一些内容,但该对话框将在主窗体实际可见之前显示。因此,您需要延迟对话框的显示,直到主窗体实际可见为止

我确信还有其他方法可以做到这一点,但我向
TApplication.OnIdle
添加了一个处理程序,并在那里显示了对话框。显然,您需要在主窗体中使用布尔标志,以确保对话框只显示一次。使用
TApplicationEvents
来解决Delphi缺少多播事件的问题通常会更干净

procedure TMainForm.ApplicationIdle(Sender: TObject; var Done: Boolean);
begin
  if not FStartupCalled then begin
    FStartupCalled := True;//FStartupCalled is a member field of TMainForm
    DoApplicationStartup;//this would show your dialog
  end;
end;
你可以这样做

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Form1.Show; // iff really necessary
  with TForm2.Create(nil) do try
    ShowModal;
  finally
    Free;
  end;
  Application.Run;
end.

您是否尝试过在主窗体的OnShow事件中创建和显示对话框?你应该在你的问题中解释你尝试了什么以及为什么没有成功。这似乎是重复的:当然。我试过OnShow、OnActivate甚至OnCreate,都没有结果。您已经接受了一个演示如何显示模态表单的答案。在你的问题中,你没有提到这是你想要的。请花一分钟时间提问,明确说明您的要求。这样可以避免你和其他人浪费时间。