Hier wird gezeigt, wie man ein Formular zur
Programmlaufzeit clonen kann.
Alle Komponenteneigenschaften des aktuellen Formulars werden kopiert.
Private Daten werden nicht kopiert.
Delphi-Quellcode:
// diese Funktion erzeugt ein neues Form aus dem aktuellen Form
function TForm1.CloneForm: TForm;
var
mstream: TMemoryStream;
begin
mstream := TMemoryStream.Create;
try
mstream.WriteComponent(self);
// der Trick: die aktuelle Klasse wird nach TFormClass gecastet
// und dann mit CreateNew eine neue, leere Instanz erzeugt
Result := (TFormClass(Self.ClassType)).CreateNew(Application);
mstream.Position := 0;
mstream.ReadComponent(Result);
finally
mstream.Free
end;
end;
Hier ist noch ein Beispiel, wie man die Funktion
CloneForm anwendet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
f : TForm;
begin
f := CloneForm;
f.Visible := False; // unsichtbar machen
f.Caption := 'this is the cloned form';
f.Left := f.Left+10;
f.Top := f.Top +10;
f.ShowModal; // modal anzeigen
f.Free;
end;
Man darf das Form, dass von CloneForm geliefert wird auch auf die eigene
FormKlasse casten:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
f : TForm2;
begin
f := CloneForm as TForm2;
[edit=Matze]Code formatiert. Mfg, Matze[/edit]