delphi表单约束在最大化时不起作用

时间:2015-04-28 01:19:40

标签: delphi

我尝试最大化宽度并保持高度。我使用delphi xe4,windows 7,1,440 * 900 2监视器。

高度约束通常效果很好但是当它超过某个值859时它就不起作用。

我猜这是因为Windows snap功能,但即使在关闭之后也是如此。

当我在没有任务栏的子监视器中执行此操作时,在主监视器中使用任务栏自动隐藏它可以正常工作。这似乎是任务栏的麻烦。

请帮助解决这个问题。感谢。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Constraints.MaxHeight := 859; // works well

  WindowState := wsMaximized;

  Caption := IntToStr(Height);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Constraints.MaxHeight := 860; // doesn't work

  WindowState := wsMaximized;

  Caption := IntToStr(Height);  // maximized as 876
end;

procedure TForm1.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer);
begin
  MaxHeight := 860;             // doesn't works and is maximized as 876
end;

1 个答案:

答案 0 :(得分:0)

如果您尝试在用户尝试最大化时限制表单的最大大小,那么这将起作用。我有自己的Form类,来自TForm,名为TRGNewForm,所有形式都来自于此。但是,该方案适用于您放入代码的表单。

Interface部分的Form类公共定义

  { Trap Sys Commands }
  procedure WMSysCommand (var Msg: TWMSysCommand); message WM_SYSCOMMAND;

Implementation

procedure TRGNewForm.WMSysCommand (var Msg : TWMSysCommand);
begin
  { If MdiChild and Maximize button pressed, then use our own routine,
    as Windows has a bug }
  if (Msg.CmdType = SC_MAXIMIZE) and
     (FormStyle = fsMDIChild)
  then Maximise_Child_Form
  else DefaultHandler (Msg);
end;

Maximise_Child_Form中,您可以根据需要设置高度和宽度。