zoukankan      html  css  js  c++  java
  • 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。。

  • 相关阅读:
    16. 3Sum Closest
    17. Letter Combinations of a Phone Number
    20. Valid Parentheses
    77. Combinations
    80. Remove Duplicates from Sorted Array II
    82. Remove Duplicates from Sorted List II
    88. Merge Sorted Array
    257. Binary Tree Paths
    225. Implement Stack using Queues
    113. Path Sum II
  • 原文地址:https://www.cnblogs.com/guorongtao/p/11307709.html
Copyright © 2011-2022 走看看