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

Delphi窗体的释放和判断窗体是否存在(Assigned、FindWindow、FindWindowEx函数) ...

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

1

常规释放和关闭:

Form.Free   -   释放Form占用的所有资源。Free后,Form指针不能再使用,除非对Form重新赋值。   
Form.Hide   -   隐藏Form。可以调用form.Show再一次显示。   
Form.close   -   关闭Form,实际的结果取决于OnCloseQuery和OnClose,如果OnCloseQuery的CanClose为False,不执行任何操作,如果为True,进一步考察OnClose的Action的值:   
  caNone:   不执行任何操作   
  caHide:   隐藏窗口,同form.Hide   
  caFree:   释放Form占用的资源,同form.Free   
  caMinimize:   Form最小化。

 

子窗体的释放:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;              //释放子窗体
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Form1:=nil;                //清空   释放窗体一定要用窗体的名称释放,不能用self:=nil 否则 Assigned 还是能找到
end;

 

另一个更高级的函数:

FreeAndNil(Form1);   //顾名思义,释放和清空两用。

 

 

2

判断窗体是否存在:

方法一:Assigned 函式在参数不为nil时返回True,表示指针已经指到某个内存地址,这个内存地址可能是一个对象地首地址,也可能在函数或过程中,声明一个指针变量,没有赋值为nil ,无乱的指向某处,这两个种情况,Assigned(指针变量)都不为nil ,  函数放回True;

而參數為nil時則傳回False。

Assigned 并不是一个真正的函数。

 

正确的用法:

if Assigned(Form1) then 
begin
   Form1.close;
   Form1:=nil;
end;

或:

if Assigned(Form1) then 
begin
   Form1.close;
   FreeAndNil(Form1);
end;

  

方法二:FindWindow函数  用于获取一个打开的窗口的句柄

FindWindow (
  lpClassName,        {窗口的类名}   如果为空则写nil
  lpWindowName: PChar {窗口的标题}   如果标题为空则写nil
  ): HWND;              {返回窗口的句柄; 失败返回 0}

//找程序主窗口的句柄
var
  h: HWND;
begin
  h := FindWindow('TForm1', '窗体标题');    //知道窗口的类名和窗口的标题 ,为空则写nil
  ShowMessage(IntToStr(h));      {h = 656180; 这是随机, 每次启动窗口不一样}

 

还有一个扩展函数FindWindowEx

FindWindowEx获取指定窗口的某个子窗口的句柄
格式为:FindWindowEx(父窗口的句柄,子窗口的句柄,类名,标题)
注意:当子窗口的句柄为0的时候,获取的句柄是父窗口内符合类名和标题的第一个窗口的句柄,如果子窗口的句柄为某个子窗口的句柄,则获取到的句柄,是该子窗口的下一个窗口的句柄(这一点很重要哦)
这里所说的窗口并不一定是FORM,也可能是BUTTON,EDIT,LABEL。。

 


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
Delphi 控制摄像头 - 人淡如菊发布时间:2022-07-18
下一篇:
delphi2010 开发及调试WebService 实例发布时间: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