我的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和Min&最大高度/宽度约束值高于此分辨率。
我正在将 Position 属性更改为 poDesigned ,因为否则表单不会移动到我想要的位置。
当我在系统上运行我的应用程序时,它有双显示器,它会出乎意料地运行。
我还在表格的系统菜单中添加了一个自定义菜单项,当我在 OnCreate 中将位置属性更改为 poDesigned 时功能它重置系统菜单并删除自定义菜单项。
有没有办法在不修改 Position 属性的情况下重新调整和重新定位表单?
感谢您的期待。