2958: Предотвращение изменения размеров формы
В некоторых случаях разработчики могут захотеть создать в Delphi форму, содержащую некоторые характеристики диалогового окна. Например, они не хотят позволить конечным пользователям изменять размеры формы в режиме выполнения программы также, как это может программист во вромя разработки. В Delphi не существует свойств или методов для создания формы с такими характеристиками. Но из-за наличия разработанного программного слоя между Delphi и API, программисты могут справиться с этой задачей довольно легко.
Следующий пример демонстрирует способ обработки системного сообщения "WM_GetMinMaxInfo", которое позволяет разработчикам ограничивать в режиме выполнения программы размер окна (формы) определенным значением. В этом случае сообщение будет использоваться, чтобы функционально запретить возможность изменения размера окна.
Используйте следующий модуль:
unit getminmax; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs; type TForm1 = class(TForm) private{ Private declarations }procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);message WM_GETMINMAXINFO;procedure WMInitMenuPopup(var Msg: TWMInitMenuPopup);message WM_INITMENUPOPUP;procedure WMNCHitTest(var Msg: TWMNCHitTest);message WM_NCHitTest;public{ Public declarations }end; varForm1: TForm1; implementation {$R *.DFM} procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);begininherited;with Msg.MinMaxInfo^ dobeginptMinTrackSize.x:= form1.width;ptMaxTrackSize.x:= form1.width;ptMinTrackSize.y:= form1.height;ptMaxTrackSize.y:= form1.height;end;end; procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup);begininherited;if Msg.SystemMenu thenEnableMenuItem(Msg.MenuPopup, SC_SIZE, MF_BYCOMMAND or MF_GRAYED)end; procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);begininherited;with Msg doif Result in [HTLEFT, HTRIGHT, HTBOTTOM, HTBOTTOMRIGHT,HTBOTTOMLEFT, HTTOP, HTTOPRIGHT, HTTOPLEFT] then Result:= HTNOWHEREend;end. { Конец модуля} |
procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.Style:=Params.Style xor WS_SIZEBOX xor WS_MAXIMIZEBOX; end; |