首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 限制表單最大尺寸與位置:攔截 WM_GETMINMAXINFO 訊息

     編輯:Delphi

Delphi IDE 主視窗最大化時並不佔滿全螢幕,這是透過處理 WM_GETMINMAXINFO 訊息實現的。本文示範在表單中宣告訊息處理函數,設定 ptMaxSize (最大化尺寸) 與 ptMaxPosition (最大化左上角座標),以限制表單最大顯示範圍。

實作步驟

1. 私有區宣告訊息處理函數


private
  procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;

2. 實作處理函數


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;

MINMAXINFO 結構體說明

欄位型別意義
ptReservedTPoint保留
ptMaxSizeTPoint最大化時視窗尺寸 (寬/高)
ptMaxPositionTPoint最大化時視窗左上角螢幕座標
ptMinTrackSizeTPoint使用者拖曳調整的最小尺寸
ptMaxTrackSizeTPoint使用者拖曳調整的最大尺寸

常見應用場景

  • 固定最大化尺寸:設定 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` 指令詞綁定處理函數,即可輕鬆實現最大化尺寸/位置鎖定、拖曳範圍限制等進階視窗管理需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved