Delphi IDE 主視窗最大化時並不佔滿全螢幕,這是透過處理 WM_GETMINMAXINFO 訊息實現的。本文示範在表單中宣告訊息處理函數,設定 ptMaxSize (最大化尺寸) 與 ptMaxPosition (最大化左上角座標),以限制表單最大顯示範圍。
private
procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
with Message.MinMaxInfo^ do
begin
ptMaxSize.X := 800; // 最大化寬度
ptMaxSize.Y := 600; // 最大化高度
ptMaxPosition.X := 100; // 最大化時左上角 X
ptMaxPosition.Y := 50; // 最大化時左上角 Y
end;
Message.Result := 0; // 告訴 Windows 已處理
inherited;
end;
| 欄位 | 型別 | 意義 |
|---|---|---|
| ptReserved | TPoint | 保留 |
| ptMaxSize | TPoint | 最大化時視窗尺寸 (寬/高) |
| ptMaxPosition | TPoint | 最大化時視窗左上角螢幕座標 |
| ptMinTrackSize | TPoint | 使用者拖曳調整的最小尺寸 |
| ptMaxTrackSize | TPoint | 使用者拖曳調整的最大尺寸 |
ptMaxSize、ptMaxPosition。ptMinTrackSize (最小)、ptMaxTrackSize (最大)。Screen.Width/Height 動態計算 ptMaxTrackSize。
procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
with Message.MinMaxInfo^ do
begin
ptMinTrackSize.X := 400; // 最小寬度
ptMinTrackSize.Y := 300; // 最小高度
ptMaxTrackSize.X := 1024; // 最大寬度
ptMaxTrackSize.Y := 768; // 最大高度
end;
inherited;
end;
inherited 讓基類處理預設邏輯。Message.Result := 0 表示訊息已處理 (非零值視為未處理)。BorderStyle = bsNone 或自訂標題列,同樣適用。攔截 WM_GETMINMAXINFO 是控制視窗尺寸行為的標準 Windows 程式設計技巧。在 Delphi 中以 `message` 指令詞綁定處理函數,即可輕鬆實現最大化尺寸/位置鎖定、拖曳範圍限制等進階視窗管理需求。