Asignando nombres a los componentes y usando FindComponent no debería ser difícil.
POdría ser una primera forma sin muchas complicaciones.
Código Delphi
[-]
procedure TForm1.MostrarFormularioDinamico;
var
DebugForm: TForm;
memo1: TMemo;
Btn1: TButton;
Pnl1: TPanel;
begin
DebugForm:= TForm.Create(self);
DebugForm.Width:= Trunc(Self.Width/2);
DebugForm.Name := 'FormException';
Pnl1:= TPanel.Create(DebugForm);
Pnl1.Parent:= DebugForm;
Pnl1.Align:= alBottom;
Pnl1.Name := 'pnl1';
Btn1:= TButton.Create(DebugForm);
Btn1.Parent:= Pnl1;
Btn1.Name := 'Btn1';
Btn1.OnClick := ClickMe;
memo1:= Tmemo.Create(DebugForm);
memo1.Parent:= DebugForm;
memo1.Align:= alClient;
memo1.ScrollBars:= ssBoth ;
memo1.Name := 'memo1';
DebugForm.Show;
end;
En el evento ClickMe puedes hacer algo así (no he puesto comprobaciones de error):
Código Delphi
[-]
procedure TForm1.ClickMe(Sender: TObject);
var
s: string;
f:TForm;
m:TMemo;
begin
try
f := TForm(TComponent(Sender).Owner);
m := TMemo(f.FindComponent('memo1'));
s := m.Text;
MessageDlg(Format('Se ha pulsado el botón en el Formulario: %s'+
#13+#10+'En el Memo hay lo siguiente:'+#13+#10+
'----------------------------------------------'+
#13+#10+'%s'+#13+#10+'----------------------------------------------',
[f.Name, m.Text]), mtInformation, [mbOK], 0);
except
on E:Exception do MessageDlg(E.Message, mtWarning, [mbOk],0);
end;
end;
Un saludo.