我的 Delphi 2007 应用程序中有一个模态表单。我已经在表单上应用了 MinHeight、MaxHeight、MinWidth 和 MaxWidth 约束。
如果屏幕分辨率低于最小/最大约束,我想根据屏幕分辨率重新调整大小并重新定位表单。
我在OnCreate事件处理函数中编写了以下代码来处理屏幕分辨率。
procedure TfrmMyForm.FormCreate(Sender: TObject);
var
WorkArea: TRect;
iTitleHeight: Integer;
begin
inherited;
//-------------------------------------------------------------------
//Adjust Height/Width of the form if min/max values
//don't fall under the current resolution.
iTitleHeight := GetSystemMetrics(SM_CYCAPTION); //Height of titlebar
WorkArea := Screen.WorkAreaRect;
if(Self.Constraints.MinWidth > WorkArea.BottomRight.X) then
begin
if(Self.Constraints.MaxWidth > WorkArea.BottomRight.X) then
begin
Self.Constraints.MinWidth := WorkArea.BottomRight.X;
Self.Constraints.MaxWidth := WorkArea.BottomRight.X;
Self.Position := poDesigned;
SetBounds(0,0,WorkArea.BottomRight.X, WorkArea.BottomRight.Y - 5);
end
else
begin
Self.Constraints.MinWidth := WorkArea.BottomRight.X;
end;
end;
if(Self.Constraints.MinHeight > WorkArea.BottomRight.Y) then
begin
if(Self.Constraints.MaxHeight > WorkArea.BottomRight.Y) then
begin
Self.Constraints.MinHeight := WorkArea.BottomRight.Y - iTitleHeight;
Self.Constraints.MaxHeight := WorkArea.BottomRight.Y;
Self.Position := poDesigned;
SetBounds(0,0,WorkArea.BottomRight.X, WorkArea.BottomRight.Y - 5);
end
else
begin
Self.Constraints.MinHeight := WorkArea.BottomRight.Y;
end;
end;
//-------------------------------------------------------------------
end;
在设计时,我将Position属性设置如下
Position := poCentreScreen
现在,当屏幕分辨率较低(如 1024x768)并且最小和最大高度/宽度约束值高于此分辨率时,我面临三个问题。
我将Position属性更改为poDesigned,否则表单不会移动到我想要的位置。
当我在具有双显示器的系统上运行我的应用程序时,它的行为异常。
我还在表单的系统菜单中添加了一个自定义菜单项,当我在OnCreate函数中将Position属性更改为poDesigned时,它会重置系统菜单并删除自定义菜单项。
有没有办法在不修改Position属性的情况下重新调整表单的大小和位置?
感谢期待。