我试图在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控件创建比简单地执行表单并嵌入它要困难得多)
答案 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)
这是一步一步的说明:
设计您的嵌入表单。将对齐alClient
的TLayout放在表单上。将所有控件放在此布局中:
TFormEmbedded = class(TForm)
LayoutMain: TLayout;
//....
end;
设计主表单。
将布局放置在主表单上,该表单稍后将包含子表单。
将以下代码添加到主表单的FormCreate中:
procedure TFormMaster.FormCreate(Sender: TObject);
var
SubForm: TFormEmbedded;
begin
SubForm := TFormEmbedded.Create(Self);
SubForm.LayoutMain.Parent := Self.LayoutSubForm;
end;
感谢original description的联系。