| 屬性 | Owner | Parent |
|---|---|---|
| 職責 | 元件生命週期:建立/釋放、序列化 (DFM) | 視覺包含:座標系、剪裁、Tab 順序、顯示範圍 |
| 設計時指定 | Object Inspector → Owner (通常為 Form) | 拖放到容器內自動設定 |
| 執行時動態建立 | TButton.Create(Self) → Owner = Form | Button.Parent := Panel1 → 顯示在 Panel1 內 |
| 釋放行為 | Owner.Free 會遞歸釋放所有 Owned 元件 | Parent.Free **不會** 自動釋放 Child (需手動或靠 Owner) |
關鍵口訣:「Owner 管生死,Parent 管顯示」。
TForm1 方法中 Self = Form1;在 TMyButton 方法中 Self = 該按鈕實例。if Sender = Button1 then ... 區分。procedure TForm1.ButtonClick(Sender: TObject); // Button1、Button2 共用
begin
if Sender = Button1 then
Label1.Caption := '按下 Button1'
else if Sender = Button2 then
Label2.Caption := '按下 Button2';
end;
誤用示範:在獨立函數 (非方法) 中用 Self → 編譯錯誤;在事件中用 Self 當成觸發元件 → 邏輯錯誤。
| 元件類型 | Width/Height | ClientWidth/ClientHeight |
|---|---|---|
| 一般控制項 (Button, Edit...) | 外框尺寸 | 等於 Width/Height (無非客戶區) |
| TForm (有標題列/邊框) | 含標題列、邊框、捲軸的整體外部尺寸 | **客戶區**尺寸 (不含標題列/邊框),即可放置子控制項的區域 |
| TForm (BorderStyle=bsNone) | 等於 ClientWidth/Height | 同上 |
動態建立控制項時,座標 Left/Top 相對於 **Parent 的 Client 區原點 (0,0)**。
Comp := TComp.Create(Owner); Comp.Parent := ParentControl;Sender 判斷來源,用 Self 存取表單/類別成員。ClientWidth/Height 排版子控制項,用 Width/Height 設定表單整體大小。