在应用程序首次加载时,建议采取什么方式来确保主窗体完全最大化并重新绘制所有控件后再显示模态窗体?
我需要在应用程序启动时显示模态对话框(不是登录屏幕),但如果我将窗体设置为 wsMaximized
,则屏幕最大化时,控件将没有机会重新绘制,留下一个丑陋的混乱。
目前,我使用以下方式显示模态屏幕:
procedure TForm1.FormActivate(Sender: TObject);
var
frmOrderLookup:TfrmOrderLookup;
begin
onactivate := nil;
frmOrderLookup:=TfrmOrderLookup.Create(nil);
try
frmOrderLookup.showmodal;
finally
frmOrderLookup.Free;
end;
end;
OnShow
中发布消息,它将稍后处理;这消除了任何过早发送的可能性。 (难道不应该是FormCreate
吗?OnCreate
是属性本身的名称。) - Ken WhiteOnShow
,我认为在Application.Run
开始泵送消息队列之前,窗体将被创建、显示和激活,所以这并不重要。其他窗体和数据模块也将首先被创建(并触发它们的OnCreate
事件)。在实践中,当从OnCreate
中使用时,我还没有遇到过这种用法失败的情况。 - afrazierOnShow
可能会再次触发,因此也需要取消挂钩。主窗体被隐藏然后重新显示是不常见的,但并非不可能。而且,什么样的可怕的第三方组件会在创建期间调用Application.ProcessMessages
?哎呀!请告诉我,这样我就可以远离它了。 - afrazier