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

Delphi 實作表單嵌入:將子視窗無縫整合至父視窗面板

     編輯:Delphi

前言

在 Delphi 開發中,有時需要將一個表單作為子控件嵌入另一個表單的面板中,以實現模組化介面設計。這篇文章示範如何透過設定 Parent 屬性與調整邊框樣式,將 Form2 完整嵌入 Form1 的 Panel 控件內。

核心實作步驟

1. 父視窗建立子視窗

在 Form1 的 OnCreate 事件中,動態建立 Form2 實例並指定父容器:

uses Unit2;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 建立 Form2,指定 Owner 為 Panel,確保釋放機制正確
  Form2 := TForm2.Create(Panel, Self);
  // 移除邊框,使其融入面板
  Form2.BorderStyle := bsNone;
  // 最大化填滿父容器
  Form2.WindowState := wsMaximized;
  // 關鍵:設定 Parent 為 Panel,實現視覺嵌入
  Form2.Parent := Panel;
  Form2.Show;
end;

2. 子視窗建構函數調整

Form2 需要重新引入建構函數以接收父視窗參數,並保存參考以便日後響應父視窗事件:

uses Unit1;

type
  TForm2 = class(TForm)
  private
    FOwnerForm: TForm;
  public
    // 重新引入建構函數,接收額外的 OwnerForm 參數
    constructor Create(AOwner: TComponent; OwnerForm: TForm); reintroduce;
  end;

constructor TForm2.Create(AOwner: TComponent; OwnerForm: TForm);
begin
  inherited Create(AOwner);
  FOwnerForm := OwnerForm; // 保存父視窗引用
end;

3. 子視窗響應父視窗事件

透過保存的 FOwnerForm 參考,子視窗可判斷父視窗類型並觸發對應邏輯:

procedure TForm2.Button1Click(Sender: TObject);
begin
  // 檢查父視窗是否為 TForm1
  if Self.FOwnerForm.ClassType = TForm1 then
  begin
    ShowMessage('按下我了!');
  end;
end;

關鍵點總結

  • Parent 屬性:嵌入的核心,將子視窗納入父容器的視覺樹狀結構。
  • BorderStyle := bsNone:移除標題列與邊框,避免雙重邊框破壞介面一體性。
  • WindowState := wsMaximized:確保子視窗自動填滿父容器客戶區。
  • 建構函數參數傳遞:透過 reintroduce 多載建構函數,建立雙向通訊管道。

應用場景

此技術常用於:MDI 風格介面模擬、插件式模組載入、複雜表單拆分為多個獨立單元開發再整合。掌握此技巧能大幅提升大型專案的維護性與模組化程度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved