初学者的问题:如何才能不在 .dpr 中Application.CreateForm(TForm2, Form2);,而在单元中需要时才 Create ?(30

  • 主题发起人 主题发起人 拾荒者
  • 开始时间 开始时间

拾荒者

Unregistered / Unconfirmed
GUEST, unregistred user!
初学者的问题:如何才能不在 .dpr 中Application.CreateForm(TForm2, Form2);,而在单元中需要时才 Create ?(30分)<br />这是个工程方件:
program FromTest;
uses
Forms,
FromTest1 in 'FromTest1.pas' {Form1},
FromTest2 in 'FromTest2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
我有两个 Form :Form1 和 Form2,我不想像上面那样编译后的 FromTest.exe 一运行就在内存中创
费这两个 Form 。(因为如果有十几个 form 时耗内存可想而知了。) 想只在有需要时才 创建
Form2。怎样实现?
 
动态创建窗体不就可以了
form2:tform2;

form2:=tform2.create(self);
 
不想在程序一启动就创建的窗体,你可以直接从DPR文件中删除或者从projects->options
中去除,然后再在程序中动态创建
 
前辈们,能给出一个具体一点的示例吗? 我是个初学者。:)
 
去掉 .dpr 里面的这一行:
Application.CreateForm(TForm2, Form2);

在 Form1 里面的一个按钮的单击事件里面:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(nil)
// 需要时创建
Form2.ShowModal
// 显示
Form2.Free
// 释放
Form2 := nil
// 置空
end;

记得在你的 Form1 所在的单元里面 uses Unit2;
 
这是个工程方件:
program FromTest;
uses
Forms,
FromTest1 in 'FromTest1.pas' {Form1},
FromTest2 in 'FromTest2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2)
//直接把这句去掉
Application.Run;
end.

 
还有最简单的方法就是,在PROJECT菜单中,选择Options->Forms处,将不想让自动创建的从AutoCreate中去掉即可
 
form2:Tform2;

procedure TForm1.BtShowClick(Sender: TObject);
begin
form2:=tform2.create(Application);
end;

你可以下Form2中的关闭事件中加入这一项就可以关闭当前窗体
Action:=cafree;


 
今天晚上收获不少!! 提 4 个问题解决了 3 个。:)
各位有空也帮我看看:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1462469
 
后退
顶部