【Delphi】限制窗体大小的最大值与最小值

QQ主窗体可以随意拉动,但在拉小时,会在达到某个最小

宽度或高度后无法再拉动,这里有2种方法:

1):使用VCL窗体控件的Constraints子组件,如下设置:

procedure TForm1.FormCreate(Sender: TObject);
begin

    //设置窗体容器高度和宽度大小的最大值和最小值,0表示无限制
    Self.Constraints.MaxHeight := 800;
    Self.Constraints.MaxWidth := 800;
    Self.Constraints.MinHeight := 200;
    Self.Constraints.MinWidth := 200;

end;

上面这种方法有个缺点,就是在鼠标按住窗体左边边沿拉小窗体达到最小值时,窗体会移动,解决办法就是使用下面第二种方法。

2):处理windows消息WM_WINDOWPOSCHANGING

该消息在窗体大小位置正在改变时触发,代码如下:

TForm1 = class(TForm)

private
    { Private declarations }
    procedure WndProc(var Msg: TMessage);override;

end;

//重载窗体过程

procedure TForm1.WndProc(var Msg: TMessage);

var
   NewWidth,
   NewHeight: Integer;
begin

  case Msg.Msg of

     WM_WINDOWPOSCHANGING: //正在改变位置或大小
     begin
         NewWidth := PWindowPos(Msg.LParam)^.cx;
         NewHeight:= PWindowPos(Msg.LParam)^.cy;
         if (NewWidth>0) and (NewHeight>0) then
        if (NewWidth<200)or (NewHeight<200)or (NewWidth>800)or (NewHeight >800)   then
         PWindowPos(Msg.LParam)^.flags := SWP_NOSIZE or SWP_NOMOVE;
      end;

   end;

   inherited;  

end;

原文地址:https://www.cnblogs.com/caibirdy1985/p/4232959.html