May*_*ani 5 delphi firemonkey delphi-10-seattle
每个人都知道为什么在Form.shate之前调用Form.show,如果属性Form.visible = true.
我在Delphi XE7和Delphi 10 Seattle(为Windows编译的Fmx表单)中测试过
例如:
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
//break point here is called before if form.visible = false
i := 0;
end;
procedure TForm1.FormShow(Sender: TObject);
var
i : integer;
begin
//break point here is called before if form.visible = true
i := 0;
end;
Run Code Online (Sandbox Code Playgroud)
J..*_*... 10
如果主窗体未设置为在设计器中可见,则调用CreateMainForm() 将强制窗体在构造完成后可见(因此在 OnCreate触发后).
procedure TApplication.CreateMainForm;
var
I: Integer;
begin
if FMainForm = nil then
begin
// here creating form...
end;
if FMainForm <> nil then
FMainForm.Visible := True; //** force visible here
end;
Run Code Online (Sandbox Code Playgroud)
否则,表单的Visible属性在调用期间设置TCommonCustomForm.Loaded(),在表单构造期间由DFM流系统调用,因此OnShow在表单变得可见时触发. OnCreate不叫,直到后建设完成,之后的DFM流式传输.
最重要的是,您不应该假设何时将执行这些事件.如果您需要控制事情发生的顺序,您需要明确地执行此操作.