+++++如何限制一个可改变大小的窗口的最小宽度++++(20分)

  • 主题发起人 主题发起人 vernal_chevy
  • 开始时间 开始时间
V

vernal_chevy

Unregistered / Unconfirmed
GUEST, unregistred user!
该窗口有个panel,为了不让panel的宽度<626,在改变窗口的大小的时候,如果小于600,就要
让窗口宽度至少为626。该如何做?

如下代码是会出错
procedure TQueryFm.FormResize(Sender: TObject);
begin
; if GroupBox1.Width<600 then
; ; begin

; ; ; QueryFm.Width:=626;
; ; ; GroupBox1.Width:=626;
; ; end
; 。
; 。
; 。
 
WM_GetMinMaxInfo
 
截获wm_getminmaxinfo消息。
interface
......
private
; procedure StrictSize(var Message:TMessage);message wm_getminmaxinfo;
......
implementation
......
procedure TQueryFm.StrictSize(var Message: TMessage);
begin
; pminmaxinfo(Message.lParam)^.ptMinTrackSize.x:=626;
; //pminmaxinfo(message.lParam)^.ptMinTrackSize.y:=572;
; pminmaxinfo(message.lParam)^.ptmaxtracksize.x:=626;
; //pminmaxinfo(message.lParam)^.ptmaxtracksize.y:=572;
; message.Result:=0;
end;
 
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
; NewHeight: Integer; var Resize: Boolean);
begin
if newwidth<200 then
newwidth:=200;
end;
 
procedure TForm1.FormResize(Sender: TObject);
begin
if panel1.Width<600 then form1.Width:=626;
end;
 
有这么麻烦吗?
设一下窗体的Constraints属性的minwidth和minHeight不就得了![8D]
 
在窗体的Private部分加入
procedure WMGetMinMaxInfo(var MSG: Tmessage); message WM_GetMinMaxInfo;

procedure TMainForm.WMGetMinMaxInfo(var MSG: Tmessage);
begin
; inherited;
; with PMinMaxInfo(MSG.lparam)^ do
; begin
; ; with ptMinTrackSize do //如果想限制最大值,就用ptMaxTrackSize,也可以两个一块用
; ; begin
; ; ; X:=626;
; ; ; Y:=450;
; ; end;
; end;
end;

另:Constraints属性可以用,但是效果不好,你试一下就知道了。(虽然不能Resize,但是
窗体会被鼠标移动,截获WM_GetMinMaxInfo的方法就不会)
 
叶不归 说的对呀
程序写太麻烦了
也不一定好
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部