html 判断当前窗口是否是子窗口,Delphi 窗体的释放和判断窗体是否存在

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.HidecaFree:   释放Form占用的资源,同form.FreecaMinimize:   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。。

原文:https://www.cnblogs.com/guorongtao/p/11307709.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值