2015-02-23 12 views
0

Я попытался следовать примеру http://docwiki.embarcadero.com/CodeExamples/XE7/en/FMXEmbeddedForm_(Delphi), но я ударил свою первую проблему с детьми TCustomForm, которые, по-видимому, только для чтения, поэтому я прокомментировал это и поставил вместо этого ArgForm.Parent:= ArgParent;, но я все еще просто получаю пустой экран и не видны кнопки, которые находятся в моей второй форме.Как отобразить форму Delphi на панели?

Код для моей основной формы:

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. 
+1

Точно так же, как боковое: если вы освободите контейнер 'Panel1', вы также освободите всех рекрутированных детей. –

ответ

5

Вам просто нужно использовать код в точности как это написано в примере. Вы писали:

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

Но код в примере вы связаны гласит:

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

С положительной стороны, вы по крайней мере исправил написание врезать.

+0

Это сработало, но только в Windows, если я попытаюсь запустить его на Android, я получаю пустой экран, знаете ли вы, что может вызвать это? – Friso

+0

Боюсь, что я не знаю ответа на этот вопрос. –