AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi RTTI - Typinformation kommt nicht am Ziel an
Thema durchsuchen
Ansicht
Themen-Optionen

RTTI - Typinformation kommt nicht am Ziel an

Ein Thema von I.A · begonnen am 16. Mär 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#1

RTTI - Typinformation kommt nicht am Ziel an

  Alt 16. Mär 2009, 18:52
Hallo!

Seit paar Tagen beschäftigt mich das Problem der Gewinnung von Laufzeittypinformation.
Mit dem folgenden Quelltext will ich die Eigenschaften einer übergebenen Klasse anzeigen.
Leider kommt im dafür vorgesehenen ValueListEditor, hier DebugInsp, keine Information an.

Sieht zufällig jemand, was ich falsch gemacht habe. Ich weiß nicht mehr weiter. Auch das Studium
der Unit TypInfo hilft mir nicht weiter. Ebenso wenig helfen andere Quelltexte, die Typinformation sammeln. Deshalb wär es schön, wenn ich meine eigene Version fehlerbereingen könnte.

Delphi-Quellcode:
var
  _Class: TObject;
  _Index: Integer;
  _TypeInf: PTypeInfo;
  _TypeDat: PTypeData;
  _PropList: PPropList;
  AProperties: TTrings;

begin
  AProperties := TStringList.Create;
  AClassAnchor := AClass; //AClass wurde an anderer Stelle instnatiiert
  if Assigned(FClassAnchor) then
  begin
    //Typinformation holen
    AClassTypeInfo := AClass.ClassInfo;
    AClassTypeData := GetTypeData(_TypeInf);
    try
      APropertyCount := AClassTypeData.PropCount;
      //getmem(_PropList, Sizeof(TPropInfo) * AClassTypeData.PropCount);
      //Hatte vorher GetPropinfos() verwendet. Da war getmem nötig. Funzt aber auch nicht
      if Assigned(_PropList) then
      GetPropList(AClass,_PropList);
      for _Index := 0 to AClassTypeData.PropCount-1 do
      AProperties.Add(TProperty.CreateClass(AClass.ClassType,_PropList[_Index]^.Name));
      
      Form1.OutputClassProperties(AClassAnchor: TObject);
    finally

   // freemem(_PropList, Sizeof(TPropInfo) * AClassTypeData.PropCount);
   // wenn freemem aufgerufen wird folgt EAccessviolation
    end;
  end;
end;


//Hier ist die AUsgabe der Typinformation codiert:
procedure TForm1.OutputClassProperties(AClass: TObject);
var
  Index: Integer;
begin
  ATypeInfo.ClassAnchor := AClass;
  for Index:=0 to ATypeInfo.PropertyCount - 1 do
  begin
    ATypeKind := ATypeInfo.PropTypeKind[Index];
    if ATypeKind <> tkMethod then
    begin
      case ATypeKind of
        tkInteger,
        tkString,tkWChar,tkLString,tkWString,tkInt64:
         begin

            //Hier will ich die Ausgabe als Eigenschaft | Typ realisieren
            DebugInsp.InsertRow( //Debugisp ist ein ValueListEditor
               ATypeInfo.PropertyName[Index],
               ATypeInfo.PropertyType[Index].Name,
               true
            );
           
         end;
        tkFloat: ;
        tkEnumeration: ;
        tkSet: ;
        tkClass: ;
      end;
    end
    else
    begin
    end;
  end;
end;
Wer hat den entscheidenden Fingerzeig.

Die Unit ist mit {$TYPEINFO ON} übersetzt.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 16. Mär 2009, 19:26
Wie sieht denn die Klasse aus, welche du anzeigen willst?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#3

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 16. Mär 2009, 19:29
Hallo sirius,

Dake zuerst für die Hilfbereitschaft! Die Klasse, die ich anzeigen will ist ein TMemo.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#4

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 02:11
guck Dir dochmal die Klasse mit genauem Auge an


ganz unten:
XML Serializer ...

http://www.dragonsoft.us/delphi_vcl.php

da steht alles drin, was Du brauchst

wenn Du eine TMemo einfach mal genauso wie mit dem Delphi Original Inspektor bearbeiten willst, dann bietet sich

TJvInspector an .. oder auch die komponenten von TMS .. wobei man da noch paar Anpassungen vornehmen muss, damit die auch mit verschachtelten Komponentenstrukturen klar kommt ..




oder hier auch nochmal ...

http://www.delphipraxis.net/internal...148&highlight=
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#5

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 09:15
Zitat von stoxx:
guck Dir dochmal die Klasse mit genauem Auge an


ganz unten:
XML Serializer ...

http://www.dragonsoft.us/delphi_vcl.php

da steht alles drin, was Du brauchst

wenn Du eine TMemo einfach mal genauso wie mit dem Delphi Original Inspektor bearbeiten willst, dann bietet sich

TJvInspector an .. oder auch die komponenten von TMS .. wobei man da noch paar Anpassungen vornehmen muss, damit die auch mit verschachtelten Komponentenstrukturen klar kommt ..




oder hier auch nochmal ...

http://www.delphipraxis.net/internal...148&highlight=
Hmm, erst mal danke, aaaaberrr, wie weise ich meine Klasse zu? Die Methode AssignTo ist protected.

Danach will ich ja die Klasseneigenschaften anzeigen. Mit welcher Methode oder Funktion/Prozedur muss ich da die erzeugte XML Datei auslesen?

Leider ist hier http://www.dragonsoft.us/delphi_vcl.php nur die Komponete ohne Doku.

So, wie ich das Demo bisher verstanden habe, das ich die XML Serialisierer Methoden aufrufen kann, als ob sie Bestandteil jeder Klasse wären. Ich habe aber in der kurzen Zeit des Reinguckens noch nicht verstanden, warum das geht? Kannst Du bitte etwas Licht in Dunkel bringen.

Mein Ziel ist, Eigenschaft, Typ und Wert anzeigen zu lassen. Zunächst egal wo.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 10:20
Zitat:
So, wie ich das Demo bisher verstanden habe, das ich die XML Serialisierer Methoden aufrufen kann, als ob sie Bestandteil jeder Klasse wären. Ich habe aber in der kurzen Zeit des Reinguckens noch nicht verstanden, warum das geht? Kannst Du bitte etwas Licht in Dunkel bringen.
das scheint nicht Dein Hauptinteresse zu sein, aber es geht über Class Helper ..


Zitat:
Hmm, erst mal danke, aaaaberrr, wie weise ich meine Klasse zu? Die Methode AssignTo ist protected.
Mein Ziel ist, Eigenschaft, Typ und Wert anzeigen zu lassen. Zunächst egal wo.
ja ... okay ..

also JEDI

http://jvcl.delphi-jedi.org/

dort den TJvInspector ..

und dann

Delphi-Quellcode:
begin
 inspectorMain.InspectObject := form1;
end;
dann wird das Form zum Editieren angezeigt, oder jede weitere beliebige Komponte und deren published Eigenschaften .. so wie in Delphi selbst auch ..

oder eben der RTTIinspector von TMS ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#7

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 11:18
Hallo stoxx,

danke erst mal für die zahlreichen Tipps, aber ich werde wohl doch bei dem XML Serialisierer bleiben. Hab das Demo gestartet, die Komponentendaten in die XML Datei gespeichert. Das Laden klappt im Demo auch. Das passt schon so. Einen Objektinspektor habe ich von Kasparsoft. Die aus der Xml Datei gelesenen Daten dort angezeigt zu kriegen, ist mein nächster Arbeitsschritt. Danke deshalb für den Xml Serialisierer.

Viellicht kann ich mich revanchieren, indem ich die Anbindung an den Objektinspektor hier veröffentliche, wenn ich das geschafft habe.

Der Rtti Inspektor von TMS Software erfordert genauso Einarbeitung, wie der von Kasparsoft, den ich schon habe.

Außerdem will ich ja, wenn ich schon fertigen Quelltext angeboten kriege, diesen nicht nur fix und fertig benutzen, sondern schon auch verstehen. Hatte zunächst nur in den Quelltext geguckt.

Erst danach habe ich das Demo gestartet und die XML Datei erzeugen lassen. In dieser ist genau die Information enthalten, die ich brauche. Nur will ich halt gerne verstehen, wie das der XML Serialisierer macht, sonst hab ich bloß fertigen Quelltext übernommen und nix dazu gelernt. Da gab es, glaub ich, erst vor kurzem eine recht unschöne Diskussion über "Codeschmarotzer". Letzteres hab ich nicht vor. Ich werde deshalb den Quelltext des Serialisierers jetzt studieren.

Die Jedis wollen genau so erst mal verstanden sein. Nee, alles nacheinander. Jetzt ist erst mal der Serialisierer dran. Ich kann unmöglich alles auf einmal machen.
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
266 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 14:12
Hallo,

Wenn ich das hier so lese, hab auch Formdesigner Projekte gefunden, da frag ich mich doch, wa sist daran so interessant. Ist es der Spieltrieb, so einen Designer mal nachzubauen oder steckt mehr dahinter. Hier in diesem Thread scheint es um den Objektinspektor zu gehen.

Für Linux gibt es Lazarus und den Qt-Desingner. Ob MseIde da mithält, kann ich nicht beurteilen.
Auf der Windows Seite haben wir Visual Basic Delphi und C++Builder.

Trotzdem gibt es kommerzielle Komponenten, die einen Nachbau des Designers ermöglichen und die Jedi Gruppe hat auch nicht gerade wenig Zeit darauf verwendet, Designerkomopnenten bereit zu stellen.

Mich beschäftigt die Frage nach dem Warum? Ist es Spieltrieb oder steckt mehr dahinter. Ich kann mir nicht vorstellen, das es auch mit den Designerkomponenten alles andere als einfach ist, erfahrenen Firmen wie Microsoft oder CodeGear Konkurrenz zu machen.

Vielleicht kann mir ja mal jemand posten, worin der höhere Sinn und Zweck solcher Designernachbauten besteht. Ein Spleen von paar Freaks kann das nicht sein, dann würde sich das kommerziell nicht lohnen.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#9

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 14:58
einerseits ist es reizvoll sich mit der (delphi-) internen Struktur auseinanderzusetzen,
weiterhin ist das ein Projekt, was nicht schon 1000 mal programmiert wurde ,
und letztendlich hab ich versucht mit dem DFM-Editor ein Programm zu schreiben, wo man (später auch scriptgesteuert) Delphi-Form-Dateien zu allen Delphi-Versionen und Lazarus untereinander kompatibel zu machen.

soviel zu meinen Ambitionen für den DFM-Editor

Gruß Frank
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#10

Re: RTTI - Typinformation kommt nicht am Ziel an

  Alt 17. Mär 2009, 16:14
Hallo!

Hab zunächst die Helperklasse gefunden:

TSerializeToXMLHelper = class helper for TObject

Daher also die Vererbung des Serialisierers an alle Nachfolgeklassen. Interessantes Konzept.

Wo gibt es dazu verständliche Literatur?

Leider sind mir die Jedi Komponenten noch ne Nummer zu groß. Kann ja sein, das die Zuweisung der Klasse an den Inspektor mit:

Delphi-Quellcode:
begin
  inspectorMain.InspectObject := form1;
end;
kinderleicht geht. Nur habe ich damit den Quelltext dieses Objektinspektors immer noch nicht verstanden. Da ich aber einen anderen habe, den ich genauso erst mal verstehen will, wird das mit Jedi jetzt zu viel. Erst mal den Einen verstehen.

Ich fürchte aber, das der Xml Serialisierer nicht das leistet, was ich will, nämlich die Typinformation der Klasse. Das Demo des Serialisierers zeigt, wie eine Klasse nachdem sie in einer Xml Datei gespeichert wurde, wieder geladen werden kann, wobei die Eigenschaftswerte übernommen werden. So kann ich die Größe des Formulars ändern oder seine Position. In die Xml Datei gespeichert, kann ich mein Formular fortan an der neuen Position in neuer Größe anzeigen lassen. Das hilft mir bei zukünftigen Projekten.

Damit habe ich aber noch immer keine Typinformation, um die Eigenschaften einer beliebigen KOmpo anzeigen zu können. Objektinspektor hab ich. Was ich brauche, ist die Typinformation der Klasse, die in diesem Objektinspektor angezeigt werden soll.

Daher auch die Eröffnung des Threads, weil der im ersten Beitrag stehende Quelltext die gewünschte Typinformation nicht liefert. Aber wo ist mein Fehler im obigen Quelltext.

Es ist gut gemeint, wenn ihr mir weitere Quelltexte schickt. Aber ich möchte eigentlich erst mal verstehen, warum mein Quelltext zum Sammeln von Typeinfo nicht funzt?


@Delphifan2004: Meine Motivation ist ähnlich der von @_frank_.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:50 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