我认为这一定是一个常见问题解答,但谷歌搜索并没有真正帮助。
我可以做什么,不可以做什么FormCreate()
?
我想知道是否所有表单的子控件都已完全创建并可用于访问等。
我问的原因是我偶然发现了一个旧项目,我的FormCreate()
只是由
Sleep(1000);
PostMessage(Handle, UM_PROGRAM_START, 0, 0);
看来我想“稍等一下”,然后“当事情安定下来”做一些初始化......
我当时肯定有理由这样做(?),但是,在没有启发性的评论的情况下,我无法回忆起为什么我觉得这是必要的。
任何人都可以说明或引用一个链接,该链接说明了对一个人可以做什么的任何限制FormCreate()
?
[更新] 我认为 DavidHefferman 在写“应用程序开始发送消息时找到了解决方案。当您在 .dpr 文件中调用 Application.Run 时会发生这种情况”。
我想我并不关心单一的形式。例如,我的主表单想在启动时对我的配置/选项表单做一些事情,所以显然必须等到它被创建。
这是我的一个项目中的典型 .DPR ...
Application.Initialize;
Application.CreateForm(TGlobal, Global);
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TLoginForm, LoginForm);
Application.CreateForm(TConfigurationForm, ConfigurationForm);
//[snip] a bunch of other forms ...
Application.Run();
mainForm.CreateForm()
因此,我的应用程序向其自身发送 a是有意义的,UM_APPLICATION_START
在创建和初始化所有表单之前它不会处理(或者,我可以只调用 fn() ,在调用之后从我的 .DPR 触发消息Application.Run()
;但是我更喜欢这条信息,因为它更明显——我很少查看我的 .DPR 文件)。