首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Delphi MDI 子窗口管理:OpenChildForm 代碼詳細註釋

     編輯:程式設計疑難解答

代碼功能

統一入口打開/激活 MDI 子窗口:若已存在同類窗口則激活,否則創建新實例。

逐行解析

procedure OpenChildForm(FormClass: TFormClass; var Fm; AOwner: TComponent);
var
  i: Integer;
  Child: TForm;
begin
  // 1. 遍歷螢幕上所有已創建窗口
  for i := 0 to Screen.FormCount - 1 do
    if Screen.Forms[i].ClassType = FormClass then  // 找到同類窗口
    begin
      Child := Screen.Forms[i];
      // 2. 若最小化則正常顯示,否則僅置前不激活
      if Child.WindowState = wsMinimized then
        ShowWindow(Child.Handle, SW_SHOWNORMAL)
      else
        ShowWindow(Child.Handle, SW_SHOWNA);
      // 3. 確保可見、置前、獲取焦點
      if not Child.Visible then Child.Visible := True;
      Child.BringToFront;
      Child.SetFocus;
      // 4. 返回實例引用並退出
      TForm(Fm) := Child;
      Exit;
    end;

  // 5. 未找到則創建新實例
  Child := TForm(FormClass.NewInstance);
  TForm(Fm) := Child;
  Child.Create(AOwner);  // 呼叫建構子完成初始化
end;

關鍵點

  • `FormClass` 為窗口類類型(如 `TChildForm`),支持多態創建。
  • `var Fm` 為輸出參數,返回窗口實例供調用者持有。
  • `Screen.FormCount`/`Screen.Forms` 為 VCL 全局窗口列表。
  • `NewInstance` 分配記憶體,`Create` 初始化,兩步完成構造。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved