Thema: Delphi Formular clonen

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Formular clonen

  Alt 18. Feb 2005, 13:01
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]
Andreas
  Mit Zitat antworten Zitat