統一入口打開/激活 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;