0

我的 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属性的情况下重新调整表单的大小和位置?

感谢期待。

4

0 回答 0