我认为这一定是一个常见问题解答,但谷歌搜索并没有真正帮助。
我可以做什么——和不可以做什么——FormCreate()
?
我想知道表单的所有子控件是否都已完全创建并可供访问等。
我问的原因是我偶然发现了一个旧项目,我的FormCreate()
简单地包括
Sleep(1000);
PostMessage(Handle, UM_PROGRAM_START, 0, 0);
看来我想“稍等一下”,然后“当事情稳定下来时”进行一些初始化......
当然,我当时有一个理由(?),但是,在没有启发性评论的情况下,我无法回忆起为什么我认为这是必要的。
任何人都可以声明或引用一个链接,其中声明了对一个人可以执行的操作的任何限制FormCreate()
?
[更新] 我认为 David sHefferman 在写道“应用程序开始泵送消息。当您在 .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()
发送一个UM_APPLICATION_START
在创建并初始化所有表单之前它不会处理它本身(或者,我可以调用 fn() ,消息从我的 .DPR 中触发)Application.Run()
叫做;但我更喜欢这个消息,因为它更明显 - 我很少查看我的 .DPR 文件)。