Delphi窗体创建,主要分为模态创建和非模态创建窗体,区别在于当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦点从模式窗体转到其他窗体上。而非模式窗体则没有这种限制,你可以从一个非模式窗体切换到另外一个非模式窗体上。
一、模态窗体创建。
procedure TForm1.btn1Click(Sender: TObject);
begin
With TForm2.Create(Application) do
Try
ShowModal;
finally
free;
end;
end;
要注意的是这样创建出来的窗体的属主是Application,因为Application也是组件对象,它是TComponent的派生类。它的Notification方法不仅会调用其所属组件对象(直接影响),还会波及到该Form对象的所属组件对象。(间接影响)比较好的写法
with TForm.Create(nil) do
try
ShowModal;
finally
Free;
end;
如果创建的组件对象生命期较长,而且不是在同一个地方管理,比如在FormCreate方法中创建,在FormDestory方法中销毁,则此时在中间过程使用该组件应判断是否存在该组件
if Assigned(AComponent) then
begin
...
end;
在销毁时候
AComponent.Free;
AComponent := nil;
或者
freeandnil(AComponent);
二、非模态窗口创建
procedure TForm1.btn2Click(Sender: TObject);
begin
if not assigned(Form2) then
begin
Form2:=TForm2.Create(nil);
Form2.Show;
end
end;
//第二种方式创建的的窗体需要在FORM2里释放资源
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2:=nil; //Form对象指向空地址
Action := cafree; //Form关闭后释放占用的内存
end;
网友评论