2011-07-15 73 views
1

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

我可以使用框架的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; 

- 编辑

的问候,彼得

+0

当时只有一个框架可见,并且根据用户输入或其他条件更改可见框架?我只是说,在“从一帧移动到另一帧”的事件/方法中,将主窗体的大小设置为“当前帧”的大小,例如'mainForm.Width:= currentFrame.Constraints.MinWidth;'。 – ain

+0

你可以编辑你的问题,以消除面板之间的混淆(如问题标题)和框架。 – iamjoosy

+0

问题已更新。 –

回答

4

如果我正确理解你的问题,你就不会改变大小的帧,你想要的窗体更新大小以适合您的框架。让德尔福为您处理,使用AutoSize属性。

为您的表单设置AutoSize = True


我测试过AutoSize用下面的代码,使用Delphi 2010

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

代码:

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; 

这基本上让你减少面板尺寸的两种方式,来处理两种可能场景:Button1释放旧面板并创建一个新的更小的面板。 Button2直接调整现有面板的大小。两者都按预期工作!

+0

我已经完成了这个工作。唯一的问题是,当前帧比最后一帧小时它不收缩。 –

+0

我刚刚测试过,表单自动更新它的大小就好了。我将编辑答案,向您展示我用于测试的代码。也许你应该指定你使用的Delphi的版本;甚至可能会显示您用来显示和隐藏帧的代码。 –

+0

我编辑了问题以显示代码,并使用Delphi XE。 –

0

至少在Delphi 2006上有一个真正的表单自动大小anonying BUG。

当您更改其ClientWidth和ClientHeightt时,您将TStringGrid放置到窗体上(左和顶等于零,对齐等于无,顶端,CLient无关紧要),而不是将其大小调整为控件的大小。

正常情况下,当失败时控制大小减少,表格大小不会减少。

没有好的解决方法,唯一的方法就是在对象大小调整时手动设置客户端宽度和客户端高度。

据说:表单AutoSize并不总是奏效!这是VCL上的一个BUG。

相关问题