zoukankan      html  css  js  c++  java
  • DELPHI中MDI子窗口的关闭和打开

    DELPHIMDI子窗口的关闭和打开

    DelphiMDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:

     

    procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);

    begin

       Action := caFree;

    end;

      

     

    Delphi为一个Form的关闭行为指定了四种方式,分别是:

    caNone     禁止Form被关闭

    caHide     Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。

    caFree     Form被关闭,并且释放其占用的资源。

    caMinimize  Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。

     

    ===========================================================

    MDIForm调用MDIChild窗体时要这样用  

    引用

     

       if   not   Assigned(Form2)   then   begin  

                   Form2:=TForm2.Create(Self);  

                   Form2.Show;  

             end   else  

    Form2.BringToFront;  

          

       另外在MDIChildOnClose,   OnDestroy中要以下代码   Form2MIDChild窗体的名称  

       procedure   TForm2.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

       begin  

             Action:=caFree;  

       end;  

          

       procedure   TForm2.FormDestroy(Sender:   TObject);  

       begin  

             Form2:=nil;  

       end;    

    =================================================

    如何获得当前打开的子窗口的数量?

    Application.MainForm.MDIChildCount

     

    ==================================================

    怎么关闭所有打开MDI子窗体?

     

    除了在主窗体写入  

       procedure   TFrmMain.N15Click(Sender:   TObject);  

       var   I:integer;  

       begin  

             if   Application.MessageBox('确定要关闭所有窗口吗?','System',mb_iconinformation+mb_yesno)=id_yes   then  

             begin  

             for   I:=MdiChildCount-1   downto   0   do  

             MdiChildren[I].Close;  

             end;  

       end;  

          

       还要在各个子窗口写入  

       procedure   TFrmchildn.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  

       begin  

             action:=cafree;  

           Frmchildn:=nil;        

       end;  

     

    procedur TFrmchildn .FormDestroy(Sender:   TObject);  

         begin  

               TFrmchildn:=nil;  

         end;  

     

     

    =================================================

    根据以上的测试,有效代码:

    主窗体:

    引用

     

    procedure TForm1.a2Click(Sender: TObject);

    begin

    if Assigned(Form2) then

     

       begin

    Form2.Close;

       end;

     

    end;

     

    procedure TForm1.a3Click(Sender: TObject);

    begin

       if not Assigned(Form2)   then //判断子窗体是否已打开

       begin

       Form2:=TForm2.Create(Self);

       Form2.Show;

       end

       else Form2.BringToFront;

    end;

     

    子窗体:

    引用

     

    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Action:=caFree;

    end;

     

    procedure TForm2.FormDestroy(Sender: TObject);

    begin

    Form2:=nil;

    end;

     

  • 相关阅读:
    [公告]博客园准备建立SharePoint团队
    [公告]新增三款Skin
    又新增三款Skin
    一个不错的计数器
    [公告]新建新手区
    2005年1月16日 IT Pro 俱乐部活动纪实
    [好消息]祝成科技.微软公司.博客园联合打造IT俱乐部
    [公告]SharePoint团队正式成立
    SharePoint文档库存在问题
    [活动]2004年计算机图书评选
  • 原文地址:https://www.cnblogs.com/bingege/p/2152539.html
Copyright © 2011-2022 走看看