Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Delphi DFM - Objektstruktur als Tree laden (https://www.delphipraxis.net/154389-delphi-dfm-objektstruktur-als-tree-laden.html)

DataCool 9. Sep 2010 09:08

Delphi DFM - Objektstruktur als Tree laden
 
Hi Leute,

ich würde gerne die Objekte inkl. Struktur(vielleicht auch noch Properties) aus einem Delphi Forrmular(*.dfm)
laden und diese in einem Tree(ob normal oder VST) ist mir egal darstellen.
Das ganze kann ich jetzt natürlich "von Hand" machen, aber ich bin mir fast sicher das bei Delphi "hausinterne"
Mittel gibt?!

Kann mich mal bitte jemand in die richtige Richtung schubsen,

Danke Data

Bernhard Geyer 9. Sep 2010 09:30

AW: Delphi DFM - Objektstruktur als Tree laden
 
AFAIK gibts da was fertiges bei LMD und wenn mich nicht alles täuscht auch in der JEDI.

Geht aber soweit ich weiß nicht über die DFM an sich sondern über die laufende Formularinstanz.

DataCool 9. Sep 2010 09:42

AW: Delphi DFM - Objektstruktur als Tree laden
 
Hi Bernhard,

danke für den Tipp, werde in der Richtung mal schauen.
Allerdings weiß ich nicht ob der Weg über die laufende Formularinstanz,
beim meinem Ziel zum Erfolg führt.
Ich habe vor ein Projekt mit > 1 Million Zeilen(> 200 Forms inkl. Formverebung),
verwendete TMS Menus/Buttons mit den Gegenstücken von DevExpress auszutauschen.

Falls jemand eine Idee hat immer her damit ;-)

Greetz Data

P.S.: Bei einer laufenden Forminstanz könnte ich auch recht einfach alle Controls+Childs von TForm durchlaufen ;-)

himitsu 9. Sep 2010 09:46

AW: Delphi DFM - Objektstruktur als Tree laden
 
Es gibt einen Parser dafür, aber der wird dir nicht gefallen,
da dieser zwar die Resource einließt, aber daraus nur eine Form generiert (diese muß man allerdings nicht anzeigen),
welche du dann entweder über genannte Sachen auslesen kannst oder du nutzt einfach die RTTI und machst es selber.

Delphi-Referenz durchsuchenTStream.ReadComponent
dafür benötigt wird (vermutlich) die binäre Resource

Testen ob Text oder Binär geht über Delphi-Referenz durchsuchenClasses.TestStreamFormat
und falls nötig dann erstmal den Stream umwandeln Delphi-Referenz durchsuchenClasses.ObjectTextToBinary.

Nja, dann hast du die Form und mußt sie nur noch zerlegen.



PS: Schreiben ginge über Delphi-Referenz durchsuchenTStream.WriteComponent und eventuell noch Delphi-Referenz durchsuchenClasses.ObjectResourceToText.


[edit]
Dann heißt es wohl selber parsen.
Delphi-Referenz durchsuchenClasses.TestStreamFormat und Delphi-Referenz durchsuchenClasses.ObjectResourceToText kannst'e ja dennoch nutzen.

DataCool 9. Sep 2010 09:58

AW: Delphi DFM - Objektstruktur als Tree laden
 
@himitsu:
Das hört sich vielversprechend an, werde ich mir gleich mal genauer ansehen.

Greetz Data

mjustin 9. Sep 2010 10:42

AW: Delphi DFM - Objektstruktur als Tree laden
 
Zitat:

Zitat von DataCool (Beitrag 1048346)
Ich habe vor ein Projekt mit > 1 Million Zeilen(> 200 Forms inkl. Formverebung),
verwendete TMS Menus/Buttons mit den Gegenstücken von DevExpress auszutauschen.

Falls jemand eine Idee hat immer her damit ;-)

Meine erster Gedanke wäre, die GExperts Funktion 'Replace Components' zu verwenden (falls alte und neue Komponente sich nicht zu sehr unterscheiden).

DelphiBandit 9. Sep 2010 10:58

AW: Delphi DFM - Objektstruktur als Tree laden -> Objekte austauschen
 
Es gibt ein kleines Tool JVCLConvert, welches man innerhalb der jvcl im Ordner devtools findet. Man kann eigene "Ersetzungsmasken" definieren und damit ganze Ordner, auch mehrere, auf einmal umstellen. Für einen Großteil der in die jvcl aufgenommenen Komponenten sind schon fertige dabei. Haben das seinerzeit erfolgreich eingesetzt um die Reste der RXLibrary aus unserem Projekt zu entfernen. Voraussetzung ist allerdings, dass die Formulare als Text-DFM vorliegen.

Und klar - erst mal in einem Spielordner anwenden :-D

DataCool 9. Sep 2010 12:10

AW: Delphi DFM - Objektstruktur als Tree laden
 
Zitat:

Zitat von mjustin (Beitrag 1048369)
Meine erster Gedanke wäre, die GExperts Funktion 'Replace Components' zu verwenden (falls alte und neue Komponente sich nicht zu sehr unterscheiden).

Leider gibt es bei den beiden Komponenten durchaus einige Unterschiede die teilweise auch Änderungen in den Pas-Dateien erfordern,
z.B. ist die Eigenschaft .Visible bei TMS Boolean und bei DevExpress wie folgt definiert:

TdxBarItemVisible = (ivNever, ivInCustomizing, ivAlways);

Außerdem muss ich die ToolButtons(TMS) einer Toolbar(TMS) durchlaufen und teilweise in Abhängigkeit, ob den Toolbuttons ein Popup zugewiesen ist oder nicht,
diesen mit unterschiedlichen DevExpress-Toolbuttons auszutauschen.

Gruß Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz