【问题标题】:delphi form constraint doesn't work when maximizeddelphi形式约束在最大化时不起作用
【发布时间】:2015-04-28 01:19:39
【问题描述】:

我尝试最大化宽度并保持高度。我用的是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;

【问题讨论】:

  • 如果你想限制窗口的大小,为什么要最大化它?
  • WorkArea 维度是什么?例如,您可以使用 Screen.WorkAreaRect 从全局屏幕变量中获取此信息。
  • @DavidHeffernan 不要全角移动
  • 这不是最大化的意义所在。我认为您应该描述最初的问题,而不是您尝试的解决方案。
  • @DavidHeffernan 这是最初的问题。我需要制作一个全宽 * 860 的图表窗口,应该在所有尺寸的显示器中使用。

标签: delphi


【解决方案1】:

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

Interface 部分,在您的表单类公共定义中

  { 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 中,您可以根据需要设置高度和宽度。

【讨论】:

  • 谢谢。很抱歉,由于我的声誉不佳,我无法添加投票。
  • 如果你能把它作为正确的答案,那么请这样做。
猜你喜欢
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 2018-11-30
  • 2018-12-30
  • 2015-03-13
相关资源
最近更新 更多