AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten merken und später zuweisen

Ein Thema von stahli · begonnen am 29. Sep 2008 · letzter Beitrag vom 2. Okt 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Komponenten merken und später zuweisen

  Alt 2. Okt 2008, 15:00
So, danke an alle!
Das funktioniert jetzt wunderbar.

Meine Komponenten enthalten jetzt lediglich zwei Methoden zum Schreiben und Lesen in bzw. aus einer TExtIniFile.
Dabei können beliebige Daten (auch binäre Daten, einigene Objekte und Zeiger auf fremde Objekte) gespeichert und wieder hergestellt werden.

Für das Wiederherstellen von Objekten müssen die entsprechenden Klassen vorher registriert sein. Mehr ist nicht zu beachten.

Das Wiederherstellen von Zeigern auf fremde Komponenten (die ebenfalls in die Datei geschrieben wurden)funktioniert automatisch, ohne extra irgendwelche temp. ID´s verwalten zu müssen.
Mehrfaches Einlesen der gleichen Datei und Erzeugen analoger Komponenten und Beziehungen ist problemlos möglich, da die Beziehungen untereinander bei jedem Einlesevorgang erneut gültig sind (z.B. 5 Opel Corsa-Instanzen mit allen entsprechenden Objektbeziehungen für ein Autohaus).


Meine betreffenden Komponenten habe ich TExtIniFile bekannt gegeben, so dass nach dem Erzeugen der Komponenten-Instanzen diese gleich veranlasst werden, ihre Daten einzulesen. Dieser Teil ließe sich leicht auch auf andere Komponenten anpassen (oder wenn man die erzeugten Komponenten von außen veranlasst, ihre Daten zu lesen, braucht man gar nichts weiter verändern).

Delphi-Quellcode:
function TExtIniFile.DoReadComponent(Section, Ident: String; ReadingComponent,
  OwnerComponent: TComponent; List: TList): TComponent;
var
  S: String;
  CN: String;
  CCN: String;
  P: Integer;
  RC: TComponent;
  ExistFlag: Boolean;
begin
  Result := nil;
  S := ReadString(Section, Ident, '');
  if (S <> '') and (S <> 'Component(nil)') then
  begin
    P := Pos('(', S);
    Delete(S, 1, P);
    P := Pos(')', S);
    CN := Copy(S, 1, Pred(P));
    CCN := ReadString('Component(' + CN + ')', '{ClassName}', '');
    if not PropertyFlag then
    begin
      RC := nil;
      ExistFlag := ExistComponentName(CN);
      if ExistFlag then
      begin
        RC := FoundComponent(CN);
      end
      else
      begin
        if Assigned(ReadingComponent) then
         begin
          RC := ReadingComponent;
        end
        else
        begin
          if (CN <> '') and (CCN <> '') then
          begin
            FindClass(CCN);
            RC := TComponentClass(GetClass(CCN)).Create(nil); // KOMPONENTE ERZEUGEN...
          end;
        end;
      end;
      if Assigned(RC) then
      begin
        if Assigned(OwnerComponent) then
          OwnerComponent.InsertComponent(RC);
        if Assigned(List) then
          List.Add(RC);
        if RC is TDCustom then // ...UND GLEICH DATEN EINLESEN
        begin
          (RC as TDCustom).LoadFromFile(Self, 'Component(' + CN + ')', '');
        end
        else
        if RC is TVCustom then // ...UND GLEICH DATEN EINLESEN
        begin
          (RC as TVCustom).LoadFromFile(Self, 'Component(' + CN + ')', '');
        end;
      end;
      if not ExistFlag then
        ComponentList.AddObject(CN, RC);
      Result := RC;
    end;
  end;
end;
Wenn Interesse besteht, stelle ich die TExtIniFile gern im Forum bereit.


Ach so, ein Nachsatz:
Ich wollte die Unterstützung noch von public propertys (Objekten) ermöglichen. Ich habe IsStoredProp verwendet, was auch funktionierte. SetObjectProp führte jedoch zu einem Laufzeitfehler. Eine Alternative habe ich nicht gefunden. Gibt´s da noch etwas?


Stahli
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz