【问题标题】:How embed a firemonkey form inside a control?如何在控件中嵌入 firemonkey 表单?
【发布时间】:2012-02-21 07:56:12
【问题描述】:

我尝试在滚动框内嵌入表单:

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 控件远比简单地创建一个表单并嵌入它要困难得多)

【问题讨论】:

  • 在滚动条中嵌入表单。你确定这就是你的意思吗?
  • 是的,很抱歉造成混乱。而是一个滚动框。

标签: delphi delphi-xe2 firemonkey


【解决方案1】:

秘诀在于如何设计子窗体。

您需要将控件创建为容器,例如 TLayout(无样式)、TRectangle(基本样式)或 TPanel。我会选择 TLayout。为你的容器决定一个名字,为了争论,说“容器”。现在创建您的子表单并将 Container 的 Parent 分配给您的父对象。

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

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

【讨论】:

  • 还是同样的问题。当您说“您如何设计您的孩子表单”时,使用 tForm 意味着不同的东西? TControlView 现在是我代码中的一个表单。
  • ListControls是什么类型的?此外,您可能想玩 Container.Align。
  • 与什么对齐值?请注意,alNone 不限于出现在其父客户区域内。顺便说一句,我对 TScrollBox 没有太多经验 - 现在坚持使用 TLayout 或 TPanel。如果这不能解决它,请发布更多代码。
  • 问题是表单没有对齐属性。我拥有的代码是我发布的...
  • 那么,你忽略了我迄今为止给出的所有建议?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这是一步一步的说明:

    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;
      

    感谢nexial original description

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2012-10-11
      • 2011-01-24
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多