Delphi窗体创建

2019-07-23  本文已影响0人  寄居他乡

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;
上一篇 下一篇

猜你喜欢

热点阅读