如何在控件中嵌入firemonkey表单?

时间:2012-01-28 20:29:46

标签: delphi delphi-xe2 firemonkey

我试图在Scrollbox中嵌入一个表单:

procedure TfrmMain.FormCreate(Sender: TObject);
var
  Control:TControlView;
begin
  Control := TControlView.Create(Self);
  Control.BorderIcons := [];
  Control.parent := ListControls;
  Control.width := 800;
  ListControls.AddObject(Control);
  Control.Visible:= True;
end;

然而,表格显示在tfrmMain后面和表格之外。

我的想法是将一个表单放在一个面板中,并在两个内部滚动框中。每个表单都代表一个包含多个控件和东西的复杂项目(不使用ListBox的原因是什么?Firemonkey控件创建比简单地执行表单并嵌入它要困难得多)

3 个答案:

答案 0 :(得分:5)

秘诀在于你如何设计你的孩子形式。

您需要将控件创建为容器,例如TLayout(无样式),TRectangle(基本样式)或TPanel。我会选择TLayout。确定容器的名称,为了参数说“容器”。现在创建子表单并简单地将Parent的Parent分配给父对象。

所以,从上面的代码(我假设TControlView是你的子表单):

procedure TfrmMain.FormCreate(Sender: TObject);
var
  Control:TControlView;
begin
  Control := TControlView.Create(Self);
  Control.Container.parent := ListControls;
  Control.Container.width := 800;
end;

答案 1 :(得分:0)

您必须将容器控件的ClipChildren属性设置为true

答案 2 :(得分:0)

这是一步一步的说明:

  1. 设计您的嵌入表单。将对齐alClient的TLayout放在表单上。将所有控件放在此布局中:

    TFormEmbedded = class(TForm)
        LayoutMain: TLayout;
        //....
    end;
    
  2. 设计主表单。

  3. 将布局放置在主表单上,该表单稍后将包含子表单。

  4. 将以下代码添加到主表单的FormCreate中:

    procedure TFormMaster.FormCreate(Sender: TObject);
    var
        SubForm: TFormEmbedded;
    begin
        SubForm := TFormEmbedded.Create(Self);
        SubForm.LayoutMain.Parent := Self.LayoutSubForm;
    end;
    
  5. 感谢original description的联系。