应用程序何时显示在任务栏上?

时间:2015-08-18 08:03:28

标签: forms delphi

我有一个在启动时显示子表单的应用程序。我已将subform.showmodal放在mainform.onCreate上,但应用程序直到稍后才显示在任务栏上。应用程序何时放在任务栏上,何时在启动时显示子表单是否明智?

1 个答案:

答案 0 :(得分:2)

注意:我假设您使用的是现代Delphi并在.dpr文件的早期设置Application.MainFormOnTaskbarTrue。也就是说,任务栏按钮与主窗体的窗口句柄相关联。

简化一点,任务栏按钮显示为可见的无主顶级窗口。

因此,当主窗体变为可见时,将创建主窗体的任务栏按钮。通过ShowWindow调用TCustomForm.CMShowingChanged来实现这一点。在执行虚拟ShowWindow之后,框架会调用DoShow,因此在执行表单的OnShow事件之后。因此,您会发现OnShow处理程序中的代码在创建任务栏按钮之前发生。

在我阅读您的问题时,您希望在显示主要表单后尽快显示您的模态表单。通过处理CM_SHOWINGCHANGED

来做到这一点
type
  TMainForm = class(TForm)
  protected
    procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
  end;

....

procedure TMainForm.CMShowingChanged(var Message: TMessage);
begin
  inherited;
  if Visible and ModalSubFormHasNotBeenShown then
    ShowModalSubForm;
end;