erstmal ich habe bereits nach dem Thema gesucht, aber der Suchbegriff clone fördert zu viele Ergebnisse.
Ich möchte zur Laufzeit eine Komponente auf Grundlage einer anderen Komponente erzeugen. Also ich habe eine "unsichtbare" Komponete in der ich zur Designzeit alles was ich so möchte einstelle. Ein Beispiel dafür wäre ein SynEdit mit zugehörigem Highlighter. Danach erzeuge ich zur Laufzeit eine neue Instanz dieser Komponente und übertrage alle Eigenschaften der Vorlage auf die Neue (Ausgenommen natürlich der Name).
Ich stelle mir dazu den folgenden Funktionsrumpf vor:
Code: Alles auswählen
procedure CloneComponent(ASrc, ATrgt : TComponent; AParent : TComponent);
Ich habe bereits folgendes gefunden:
https://www.freepascal.org/~michael/art ... /rtti1.pdf
und die Funktion von Seite 8 angepasst um mir die Eigenschaften eines Buttons anzeigen zu lassen:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons;
type
{ TForm1 }
TForm1 = class(TForm)
ToClone: TButton;
Button1: TButton;
GroupBox1: TGroupBox;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
uses
TypInfo;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
Var
PL : PPropList;
Inf : TPropInfo;
I,N : Integer;
begin
// N:=TypInfo.GetPropList(C,P);
N:=TypInfo.GetPropList(ToClone,PL);
try
for i := 0 to N - 1 do
begin
Inf := (PL^)[i]^;
Memo1.Lines.Add(Inf.Name);
end;
finally
FreeMem(PL);
end;
end;
end.
Darum frage ich hier mal in die Runde.