• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi 窗体的创建和释放

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Delphi中的窗体分为模式窗体和无模式窗体。二者的区别在于,用户可以在无模式窗体和其他窗体之间切换。这样,用户就可以同时工作于一个应用程序的几个部分。Delphi中窗体的初始化有两种情况,动态创建,和自动创建。通过show显示一个无模式窗体,ShowModal显示一个模式窗体。窗体有创建对应的也要考虑释放问题。当关闭一个窗体时,窗体并没有真正从内存中释放掉,它仍然存在于内存中,除非关闭了主窗体。因为模式窗体于无模式窗体的不同,所以二者的释放处理也有不同。

因为模式窗体可以判断什么时候关闭窗体,可以用一下代码来创建和释放窗体。

begin
  ModalForm := TModalForm.Create(Application);//动态创建窗体
  try
    ModalForm.ShowModal;//显示模式窗体
  finally
    ModalForm.Free; //释放窗体实例
    //ShowMessage(BoolToStr(ModalForm = nil));
    ModalForm := nil; //把窗体变量设为nil
    //ShowMessage(BoolToStr(ModalForm = nil));
  end;
end;

非模式窗体的创建与释放

begin
  Form1 := TForm1.Create(Application);
  Form1.show;
end;

用上述代码会导致每次都创建窗体实例,从而消耗了大量的内存。我们可以考虑让窗体只创建一次,同时在窗体关闭的时候将释放掉。

begin
  if not Assigned(ModalLessForm) then //确保只创建一个窗口
  begin
    ModalLessForm := TModalLessForm.Create(Application);
  end;
  ModalLessForm.Show;
end;

以上代码就是一个单例模式,确保只创建一次。当关闭窗体后,如果希望在内存中释放掉,就要处理器onClose事件,吧Action设为caFree,同时还要在onDestroy事件中将窗体变量指向nil。

procedure TModalLessForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  action := caFree; //当关闭窗口时释放窗体
end;

procedure TModalLessForm.FomDestroy(Sender: TObject);
begin
  ModalLessForm := nil; //在窗口销毁时,把modalLessForm变量设为nil
end;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
问题-Delphi编译时提示缺少delphi自己的单元文件发布时间:2022-07-18
下一篇:
delphi调用系统右键菜单发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap