Autor Beitrag
Roux
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 30.06.08 15:32 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 162

Win XP SP2
VS 2010 Ultimate, CC.Net, Unity, Pex, Moles, DevExpress eXpress App
BeitragVerfasst: Mo 30.06.08 16:16 
Doch das geht.

Die VCL macht nichts anderes. (DFM zB).

ausblenden 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);

_________________
MOV EAX, Result;MOV BYTE PTR [EAX], $B9;MOV ECX, M.Data;MOV DWORD PTR [EAX+$1], ECX;MOV BYTE PTR [EAX+$5], $5A;MOV BYTE PTR [EAX+$6], $51;MOV BYTE PTR [EAX+$7], $52;MOV BYTE PTR [EAX+$8], $B9;MOV ECX, M.Code;MOV DWORD PTR [EAX+$9], ECX


Zuletzt bearbeitet von hazard999 am Mo 30.06.08 16:22, insgesamt 1-mal bearbeitet
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 30.06.08 16:26 
Schau mal hier

www.blong.com/Confer...DelphiRTTI/CB140.htm

Da wird dir ein wenig der RTTI Mechanismus erklärt, den du brauchst.
hazard999
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 162

Win XP SP2
VS 2010 Ultimate, CC.Net, Unity, Pex, Moles, DevExpress eXpress App
BeitragVerfasst: Mo 30.06.08 16:27 
Mit TPersistent braucht man kein RTTI.#
Zumindest nicht direkt.

Siehe meinen Post vorher.

_________________
MOV EAX, Result;MOV BYTE PTR [EAX], $B9;MOV ECX, M.Data;MOV DWORD PTR [EAX+$1], ECX;MOV BYTE PTR [EAX+$5], $5A;MOV BYTE PTR [EAX+$6], $51;MOV BYTE PTR [EAX+$7], $52;MOV BYTE PTR [EAX+$8], $B9;MOV ECX, M.Code;MOV DWORD PTR [EAX+$9], ECX
Roux Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 30.06.08 18:46 
Danke für die zahlreichen Antworten, ich bastel mal ein wenig. :)