解决 Delphi 窗体设置Constraints后
在左边界或上边界改变窗体大小右边界或下边界跟着动的问题
Delphi 5 调试成功,应在 D4 D5 D6 中适用
没脾气
//////////////////////////////////////////////
type
TForm1 = class(TCustomForm)
//...
protected
procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging);
message WM_WINDOWPOSCHANGING;
public
//...
end;
procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
var
aRect: TRect;
begin
Windows.GetWindowRect( Msg.WindowPos.hwnd, aRect );
if (Msg.WindowPos.flags and SWP_NOSIZE = 0 ) then
begin
if Msg.WindowPos.cx < Self.Constraints.MinWidth then
begin
Msg.WindowPos.cx := Self.Constraints.MinWidth;
if Msg.WindowPos.x <> aRect.Left then
begin
Msg.WindowPos.x := aRect.Right - Msg.WindowPos.cx;
end;
end else
if (Self.Constraints.MaxWidth > 0)
and(Msg.WindowPos.cx > Self.Constraints.MaxWidth) then
begin
Msg.WindowPos.cx := Self.Constraints.MaxWidth;
if Msg.WindowPos.x <> aRect.Left then
begin
Msg.WindowPos.x := aRect.Right - Msg.WindowPos.cx;
end;
end;
if Msg.WindowPos.cy < Self.Constraints.MinHeight then
begin
Msg.WindowPos.cy := Self.Constraints.MinHeight;
if Msg.WindowPos.y <> aRect.Top then
begin
Msg.WindowPos.y := aRect.Bottom - Msg.WindowPos.cy;
end;
end else
if (Self.Constraints.MaxHeight > 0)
and(Msg.WindowPos.cy > Self.Constraints.MaxHeight) then
begin
Msg.WindowPos.cy := Self.Constraints.MaxHeight;
if Msg.WindowPos.y <> aRect.Top then
begin
Msg.WindowPos.y := aRect.Bottom - Msg.WindowPos.cy;
end;
end;
end;
inherited;
end;
// 没脾气,notemper@hoolee.com,zhaixudong@shareware.com.cn
// 2001.5.9
// 可能每次消息触发都执行 GetWindowRect 会影响效率,若有更优解决办法请告知。
//////////////////////////////////////////////