我尝试最大化宽度并保持高度。我使用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;
答案 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
中,您可以根据需要设置高度和宽度。