【问题标题】:Is it possible to set Form.Width to 10000 pixel?是否可以将 Form.Width 设置为 10000 像素?
【发布时间】:2018-07-29 17:12:25
【问题描述】:

当您编译空白表单并尝试使用鼠标调整其宽度时,当它的客户端宽度接近屏幕分辨率宽度时,它可能会停止。

即使在设计器中也无法设置更宽的形式。 (很奇怪,我永远不会认为它会发生)。我也玩过Constraints,但这也不是解决办法。

是否可以将 Form.Width 设置为 10000 像素?

【问题讨论】:

  • 当你尝试这样做时会发生什么?
  • @DavidHeffernan 当您使用鼠标时,它会停止加宽。如果您尝试将值 10000 放在设计时,它将是可能的最高值。
  • 我不明白。我知道窗口管理器不会让您调整大小大于桌面大小。但是您可以以编程方式设置宽度。当你这样做时会发生什么?您可以自己回答问题。
  • 如果您尝试以编程方式设置表单的宽度(Form1.Width := 6000),将无济于事。仍然是 1932 (1920x1080)
  • 我在接受的答案下添加了您评论中的信息并删除了重复状态。

标签: delphi delphi-7


【解决方案1】:

窗口大小受系统限制 - 您可以使用函数 GetSystemMetrics(SM_CXMAXTRACK) 检索此值 - 对于我的 1280x1024 显示器,它是 1292。

为了让您的表格更宽,您可以将消息WM_GETMINMAXINFO 提供所需的最大尺寸:

procedure WMGETMINMAXINFO(var M: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
...
procedure TForm1.WMGETMINMAXINFO(var M: TWMGetMinMaxInfo);
begin
  M.MinMaxInfo.ptMaxTrackSize.X := 5000;
  M.Result := 0;
  inherited;
end;

使用这样的消息处理程序,我可以在运行时成功设置Width := 5000;


通常您应该能够使用表单的Constraints 属性并设置其MaxWidth 来实现此目的,如this answerTCustomFormWM_GETMINMAXINFO 在Delphi 7 中存在缺陷。从ConstrainedResize 方法调用消息处理程序依赖于一些 FSizeChanging 布尔字段,不幸的是它从未设置为 true。这已得到纠正,并且在 D2007 和 DXE 之间的某处删除了该字段。

【讨论】:

  • 太棒了!也适合我...谢谢
  • /To Edit/ 不,D7中有约束,我也玩过,但也不是解决方案。你的答案是正确的。
  • @SertacAkyuz 真的吗?我可以设置 constraints.maxwidth := 10000 但我不能以任何方式将宽度拉伸到 2000 以上。
  • 我搞砸了,它不能在 D7 中工作...删除了我的评论。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
相关资源
最近更新 更多