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


    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。。

  • 相关阅读:
    权限管理的三级菜单的流程
    Django之extra
    Django-Rest-Framework的解析器和渲染器
    Django-Rest-Framework的权限和频率
    权限管理-一级菜单-二级菜单-三级菜单-路径导航和权限粒度控制到按钮级别
    Django-Rest-Framework的版本和认证
    【leetcode】Valid Number
    【leetcode】4Sum
    【leetcode】Preimage Size of Factorial Zeroes Function
    【leetcode】Champagne Tower
  • 原文地址:https://www.cnblogs.com/guorongtao/p/11307709.html
Copyright © 2020-2023  润新知