選單項目需根據資料庫表、目錄結構、設定檔或使用者權限動態生成,而非設計靜態固定。
type
TMainForm = class(TForm)
...
procedure MyClick(Sender: TObject); // 自訂點擊事件
end;
procedure TMainForm.MyClick(Sender: TObject);
begin
ShowMessage('您點選了:' + TMenuItem(Sender).Caption);
// 依 Caption 或 Name 執行對應業務邏輯
end;
var
SubMenuSource: array of string; // 動態陣列或 TStringList
begin
SetLength(SubMenuSource, 3);
SubMenuSource[0] := '報表列印';
SubMenuSource[1] := '資料匯出';
SubMenuSource[2] := '系統設定';
end;
procedure TMainForm.FormCreate(Sender: TObject);
var
i: Integer;
mi: TMenuItem;
begin
for i := 0 to High(SubMenuSource) do
begin
mi := TMenuItem.Create(Self); // 必須指定 Owner 以便自動釋放
mi.Name := 'DynItem' + IntToStr(i); // 唯一 Name 便於查找
mi.Caption := SubMenuSource[i];
mi.OnClick := MyClick; // 綁定統一事件
FileMenu.Add(mi); // 加入主選單「檔案」下
end;
end;
TMenuItem 並 Parent.Add(Child)。ImageList 並指定 ImageIndex。Enabled、Visible。mi.ShortCut := ShortCut(Ord('P'), [ssCtrl]) 設為 Ctrl+P。FileMenu.Clear(會自動 Free 子項),再重新建立。Create(Self) 導致記憶體洩漏或 Access Violation。Add 同一個 TMenuItem 實例(每次必須 Create 新實例)。TMenuItem(Sender) 導致存取錯誤屬性。