我有一个在启动时显示子表单的应用程序。我已将subform.showmodal放在mainform.onCreate上,但应用程序直到稍后才显示在任务栏上。应用程序何时放在任务栏上,何时在启动时显示子表单是否明智?
答案 0 :(得分:2)
注意:我假设您使用的是现代Delphi并在.dpr文件的早期设置Application.MainFormOnTaskbar
到True
。也就是说,任务栏按钮与主窗体的窗口句柄相关联。
简化一点,任务栏按钮显示为可见的无主顶级窗口。
因此,当主窗体变为可见时,将创建主窗体的任务栏按钮。通过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;