zoukankan      html  css  js  c++  java
  • Delphi MDI 子窗体的创建和销毁 [zhuan]

    1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建

    //该函数判断MDI 子窗体是否存在,再进行创建和显示
    function isInclude(formclass: TFormClass): boolean;
    var
      i: Integer;
      form: TObject;
    begin
      result := false;
      for i := 0 to frmMain.MDIChildCount do
      begin
        form := frmMain.MDIChildren[i];
        if form is formclass then
          result := true;
      end;
    end;

    //例如:打开frmAbout这个子窗体

    procedure TfrmMain.actAboutExecute(Sender: TObject);
    begin
      if not isInclude(TfrmAbout) then
    //  if not Assigned(frmAbout) then
      begin
        frmAbout := TfrmAbout.Create(Self);
        frmAbout.Caption := '关于';
        frmAbout.Show;
      end
      else
        frmAbout.Show;
    end;

     http://www.whois.com/whois/pc100.net

    2. 如果判断一个form是否存在,用 assigned(aForm)来看是否有创建并指向这个instance. (需要注意form destroy掉时,aForm 指标并没有free掉,要注意下一条的细节。


    3. 对于mdi child 的销毁,注意以下几项: 
       ①关闭mdi, 用form.close方法。 
       ②在 onClose事件处理中,需要判断是否可以 free掉, 用 Action := caFree 
       ③销毁form时,需要释放form参数的指针内容。 aForm := nil.


    Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的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子窗口的默认关闭行为。

  • 相关阅读:
    更新Centos 8 内核
    Docker安装
    微服务学习实战笔记 4.1-系统部署篇-Centos 8 下 安装配置K8S
    安装supervisor
    微服务学习实战笔记 4.2-系统部署篇-搭建 Harbor 镜像仓库服务器
    SRS流媒体服务器安装
    微服务学习实战笔记 1.1-系统架构篇-技术选型
    .Net Core 3.0 使用 Serilog 把日志记录到 SqlServer
    IdentityServer4 自定义授权模式
    IdentityServer4 保护.net framework webapi
  • 原文地址:https://www.cnblogs.com/jijm123/p/10599084.html
Copyright © 2011-2022 走看看