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

时间:2018-07-29 17:12:25

标签: delphi delphi-7

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

即使在设计师中也无法设置更广泛的形式。 (足够奇怪,我永远都不会想到它会发生)。我也玩过Constraints,但这也不是解决方案。

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

1 个答案:

答案 0 :(得分:3)

窗口大小受系统限制-您可以使用函数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 answer一样,但是WM_GETMINMAXINFO中的TCustomForm在Delphi中是有缺陷的7.从消息处理程序中调用ConstrainedResize方法取决于某个FSizeChanging布尔值字段,不幸的是,该字段从未设置为true。此问题已得到纠正,并且在D2007和DXE之间的某个位置删除了该字段。