在调用Windows API函数ShowWindow
之前立即触发OnShow
事件。这是对ShowWindow
的调用,实际上会导致窗口出现在屏幕上。
所以你理想的情况下需要在ShowWindow
的电话后立即运行。事实证明,驱动所有这些的VCL代码在消息处理程序中为CM_SHOWINGCHANGED
。该消息处理程序触发OnShow
事件,然后调用ShowWindow
。所以一个优秀的解决方案是在CM_SHOWINGCHANGED
运行处理程序后立即显示您的模态窗体。像这样:
type
TMyMainForm = class(TForm)
private
FMyOtherFormHasBeenShown: Boolean;
protected
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
end;
.....
procedure TMyMainForm.CMShowingChanged(var Message: TMessage);
begin
inherited;
if Showing and not FMyOtherFormHasBeenShown then begin
FMyOtherFormHasBeenShown := True;
with TMyOtherForm.Create(nil) do begin
try
ShowModal;
finally
Free;
end;
end;
end;
end;
使用PostMessage。 http://stackoverflow.com/questions/7094873/visibility-of-form-in-delphi – SimaWB
抱歉,为什么这个问题在主题问题列表中显示“模糊”? – kobik
@ kobik:当他们有一个你忽略的标签,并且他们的投票得分超过某个限制时,AFAIK问题会变暗。顺便提一下关于SO工作方式的问题,最好在元网站上提问(请参阅主导航栏中的链接)。 –