ShowMessage 對話框被登入視窗的工作列縮圖遮蓋。Delphi 專案預設 Application.CreateForm(TLoginForm, LoginForm) 將登入視窗設為 MainForm。主介面視窗為次要表單,其 Owner 為 Application。當主介面最小化還原時,Z-Order 計算受 MainForm (登入視窗) 影響,導致模態對話框層級異常。
// .dpr 專案原始檔
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
// 1. 手動建立並顯示登入視窗 (非 MainForm)
LoginForm := TLoginForm.Create(nil);
try
if LoginForm.ShowModal = mrOk then
begin
// 2. 登入成功:釋放登入視窗,切換 MainForm
LoginForm.Free;
LoginForm := nil;
// 3. 建立真正的主介面視窗
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end
else
Application.Terminate;
except
LoginForm.Free;
raise;
end;
end.
ShowModal 獨立運行,不佔用 Application.MainForm。Application.CreateForm 設為主視窗,擁有正確的任務列按鈕與 Z-Order 權限。LoginForm.Hide,主介面 Show。但登入視窗仍佔用 MainForm,Z-Order 問題可能殘留。ShowMessage('訊息', MainForm.Handle) (需自訂封裝),強制綁定父視窗句柄。核心原則:真正的主視窗應為應用程式核心介面,登入/啟動畫面僅為臨時模態對話框,不應佔據 MainForm 身分。