https://wedelphi.com/t/135849/
请详细些,并给出例子。谢谢。 |
Application.CreateForm()创建的第一个可显示的窗体是自动成为主窗体,并且自动显示, 并且在Project Options中窗体左列表中显示,如果有多个这样的窗体的话,这些窗体都会在 程序运行时就自动创建,想用的时候可以不用Create的了,直接Show就行了,TForm.Create 创建的窗体必须show一下才行,其它好象就没有什么分别, |
application.createform是创建一空白的窗体,就象DELPHI里点NEW APPLICATION出来的窗体 一样什么都没有。 而TFORM。CREATE创建出来的窗体可以是设计时候创建好的。也就是设计好窗体,运行时动态 创建。这样做的好处主要是:DELPHI默认的是自动创建,在菜单PROJECT下的OPTION中可以看 到工程中各个单元是自动创建或者是动态创建。但是当工程比较大拥有大量窗体时候,如果 所有窗体都是动态创建的,那么势必影响程序的启动速度和运行速度,因为创建的窗体都是 要放到内存中的。而现实的情况是,某些用户使用某部分功能,而另一些人则用其他的。这 时候就应该使用动态创建窗体的方法了。具体的使用方法如下。先设计好一个窗体。 把窗体名称注释掉 var Formtest: TFormtest;//该句应该注释掉 implementation 更改后应该为 {var Form1: TForm1;} implementation 在调用的窗提内先要在uses中添加 implementation uses TFormtestUnit; 再如下写 procedure TFormMain.N11Click(Sender: TObject); var formtest:Tformtest; begin with TFormNzdbdCk.Create(Self) do Show; end; 应该能看到结果了吧 |
两者区别很大 比较一下 Application.CreateForm(TForm1, Form1); 与 Form1 := TForm1.Create(Application); 的区别就容易清楚了. Form1 := TForm1.Create(Application); 是先调用TForm1的Create方法, 然后付赋值给Form1变量 Application.CreateForm(TForm1, Form1); 则不同. 他先得到一个Instance的指针, 把这个指针 赋值给Form1, 然后是Form1.Create(Application). 这与上面的区别在于, 在TForm1的OnCreate 事件中, 我们可以使用Form1这个变量. 另外一点是Application.CreateForm中判断所创建的Form是否MainForm, 如果是则MainForm := Form1; 这点很重要, 因为Application.MainForm是只读的属性, 整个程序运行过程中只在此赋值一次, 以后 再也不能更改. 注: mat的Application.CreateForm创建了一个空白的窗体的说法是不正确的 []sorry mat, no hard feelings. |
還是會長老師厲害 |
呵呵huizhang兄弟说的是,确实犯了点错误,不好意思,差点误导了别人。 |
多人接受答案了。 |