Komponenten einer Form Speichern und Laden (binär)

// Im Beispiel wird gezeigt, wie man ein TPanel mit einem daraufliegenden TEdit in
// eine Datei (binär) speichert und diese später wieder laden kann.
// Auf der Form befinden sich 2 Buttons (Laden/Speichern) und 1 Panel.
// Das TEdit wird zur Laufzeit erstellt.
// Zum Speichern/Laden wird ein TFilestream und dessen Funktionen
// WriteComponent() und ReadComponent() benutzt.
// Die geladenen Komponenten müssen noch mit RegisterClass(__classid(Typ)) registriert werden.
// Testweise kann etwas in das TEdit geschrieben werden, dieser Text wird dann mit gespeichert.

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TEdit *e = new TEdit(Panel1); // Editfeld erzeugen, Owner wird das Panel, das ist
    e->Parent = Panel1;           // wichtig, damit das TEdit automatisch mit gespeichert wird.
}
// speichern
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // Filestream erzeugen, in dem die Komponenten gespeichert werden
    TFileStream *fs = new TFileStream("Test.dat", fmCreate);
    fs->WriteComponent(Panel1);
    delete fs;

    // Panel testweise entfernen
    delete Panel1;
}
// laden
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    // Filestream erzeugen, in dem die Komponenten geladen werden
    TFileStream *fs = new TFileStream("Test.dat", fmOpenRead);
    RegisterClass(__classid(TPanel)); // TPanel registrieren
    RegisterClass(__classid(TEdit)); // TEdit registrieren

    TComponent* comp = fs->ReadComponent(NULL);
    ((TControl*)comp)->Parent = this;
    delete fs;
}