动态调整窗体的大小以适应 Delphi 中框架的大小

Pie*_*Wyk 2 delphi resize dynamic frame

我有一个具有 5 个不同大小框架的应用程序。当我从一个框架移动到另一个框架时,我想动态地重新调整主窗体的大小以适应框架。

我可以使用MinHeight/MinWidth框架的属性来强制主窗体适合框架,但是当移动到较小的框架时,主窗体不会调整它的大小。

有任何想法吗?

- 编辑

...
TFormMain = Class(TForm)
...
public
  FrameImportPackage: TFrameImportPackage;
...

procedure TFormMain.MenuPackagesImportClick(Sender: TObject);
begin
  if not (Assigned(FrameImportPackage)) then
    begin
      FrameImportPackage := TFrameImportPackage.Create(Self);
      FrameImportPackage.LabelFrameCaption.Caption := 'Import or Edit a Package';
    end
  else
    begin
      FrameImportPackage.BringToFront;
    end;

  FrameImportPackage.Parent := Self;
end;
Run Code Online (Sandbox Code Playgroud)

- 编辑

问候, 彼得

Cos*_*und 5

如果我正确理解您的问题,那么您的框架尺寸不会改变,您希望表单更新尺寸以适合您的框架。让 Delphi 使用该AutoSize属性为您处理。

AutoSize = True为您的表单设置。


我已经AutoSize使用以下代码进行了测试Delphi 2010

  • 创建一个新的 VCL 应用程序。在空白表单上放置一个面板,保留它的名称 ( Panel1)。确保面板不会太小,因为我们将编写代码以在运行时减小它的大小。
  • 将表单的AutoSize属性设置为True.
  • 将两个按钮放在面板上,Button1然后Button2
  • 双击按钮,然后复制粘贴以下事件处理程序:

代码:

procedure TForm31.Button1Click(Sender: TObject);
var NewR: TRect;
begin
  NewR := Panel1.BoundsRect;
  Dec(NewR.Right, 32);
  Dec(NewR.Bottom, 32);

  Button1.Parent := Self;
  Button2.Parent := Self;

  Panel1.Free;
  Panel1 := TPanel.Create(Self);
  Panel1.BoundsRect := NewR;
  Panel1.Parent := Self;

  Button1.Parent := Panel1;
  Button2.Parent := Panel1;
end;

procedure TForm31.Button2Click(Sender: TObject);
begin
  Panel1.Height := Panel1.Height - 32;
  Panel1.Width := Panel1.Width - 32;
end;
Run Code Online (Sandbox Code Playgroud)

这实质上为您提供了两种减小面板大小的方法,以处理两种可能的情况:Button1释放旧面板并创建一个新的、更小的面板。Button2直接调整现有面板的大小。两者都按预期工作!