1

http://docwiki.embarcadero.com/CodeExamples/XE7/en/FMXEmbeddedForm_(Delphi)の例に従おうとしましたが、明らかに読み取り専用である TCustomForm の子で最初の問題に遭遇したので、コメントしましたそれをArgForm.Parent:= ArgParent;代わりに入れますが、まだ空の画面が表示され、2番目のフォームにあるボタンが表示されません。

私のメインフォームのコードは次のとおりです。

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure EmbedForm(ArgParent : TControl; ArgForm : TCustomForm);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2:= TForm2.Create(Self);
  EmbedForm(Panel1, Form2);
end;

procedure TForm1.EmbedForm(ArgParent: TControl; ArgForm: TCustomForm);
begin
  //while ArgForm.ChildrenCount>0 do
  //begin
    //ArgForm.Children[0]:= ArgParent);
  //end;
  ArgForm.Parent:= ArgParent;
end;
end.

メインフォームのパネルに配置するフォームのコードは次のとおりです。

unit Unit2;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.fmx}

end.
4

1 に答える 1

5

例に書かれているとおりにコードを使用する必要があるだけです。あなたが書いた:

while ArgForm.ChildrenCount>0 do
  ArgForm.Children[0]:= ArgParent;

しかし、リンクした例のコードは次のとおりです。

while ArgForm.ChildrenCount>0 do
  ArgForm.Children[0].Parent := ArgParent;

プラス面では、少なくとも埋め込みのスペルを修正しました。

于 2015-02-23T15:56:55.973 に答える