Entwickler-Ecke

Dateizugriff - Dateiinhalt als Objekt behandeln


Roux - Mo 30.06.08 15:32
Titel: Dateiinhalt als Objekt behandeln
Hi!
Ist es möglich, dass ich aus einer Datei einen String auslese und über diesen auf ein gleichnamiges Objekt zuzugreifen?
Beispiel: Angenommen in einer Datei steht "Kreis", ich lasse diese Datei auslesen und möchte dann auf das Objekt Kreis (TShape) zugreifen. Vermutlich wird dies nicht funktionieren.

Roux


ub60 - Mo 30.06.08 16:00

Wenn Du auf allgemeine Objekte zugreifen willst, geht das (glaube ich) nicht.
In Deinem Fall sind es aber Komponenten. Da sollte Dir "FindComponent" und die F1-Taste weiterhelfen.

ub60


hazard999 - Mo 30.06.08 16:16

Doch das geht.

Die VCL macht nichts anderes. (DFM zB).


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var CompClass:string;
begin
      ComponentClass := FindComponentClass(CompClass);
      Result := TComponent(ComponentClass.NewInstance);
end;

initalization
 //RegisterClass(AClass: TPersistentClass);
// TKreis von TShape abgeleitet
RegisterClass(TKreis);


ub60 - Mo 30.06.08 16:21

"Doch das geht." finde ich eine tolle und gutnachvollziehbare Erklärung. :D :D

Hab mir eben mal den Quelltext von FindComponent angeschaut:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TComponent.FindComponent(const AName: string): TComponent;
var
  I: Integer;
begin
  if (AName <> ''and (FComponents <> nilthen
    for I := 0 to FComponents.Count - 1 do
    begin
      Result := FComponents[I];
      if SameText(Result.FName, AName) then Exit;
    end;
  Result := nil;
end;
Genau so könnte man es auch mit Objekten machen, wenn man Sie bei ihrer Erstellung in einem Array oder einer Liste "registriert".

ub60


Daimonion - Mo 30.06.08 16:26

Schau mal hier

http://www.blong.com/Conferences/BorConUK98/DelphiRTTI/CB140.htm

Da wird dir ein wenig der RTTI Mechanismus erklärt, den du brauchst.


hazard999 - Mo 30.06.08 16:27

Mit TPersistent braucht man kein RTTI.#
Zumindest nicht direkt.

Siehe meinen Post vorher.


Roux - Mo 30.06.08 18:46

Danke für die zahlreichen Antworten, ich bastel mal ein wenig. :)