Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Automatisches Ersetzten von VCL Komponenten in pas und dfm? (https://www.delphipraxis.net/125146-automatisches-ersetzten-von-vcl-komponenten-pas-und-dfm.html)

EDatabaseError 1. Dez 2008 15:58


Automatisches Ersetzten von VCL Komponenten in pas und dfm?
 
Hallo zusammen,

gibt es ein Tool für Delphi welches in einer Kollektion von pas und dfm Dateien den Klassennamen und damit verbundene Eigenschaften automatisch sucht und ersetzt?
In der pas und dfm ist z.b. die Klasse TTable, diese soll in allen Dateien durch TADOTable ersetzt werden. Hoffe ihr versteht was ich suche.

Danke schon mal ;)
Tobi

nahpets 1. Dez 2008 16:15

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Hallo,

ja, dass habe ich auch schon gesucht (und nicht gefunden).

Schnellschussantwort:

UltraEdit und über alle *.pas und *.dfm-Dateien ein Globalchange absetzen. (Es darf auch ein anderer Editor sein ;-))
Da TTable und TAdoTable nicht so ganz kompatibel sind, musst Du aber bei so einem globalen Ersetzen mit einer nicht unerheblichen "Fehlermenge" rechnen, wobei die Unterschiede bei TQuery und TAdoQuery wohl größer sind.

Alternative: selbstschreiben:

OpenDialog mit Multiselect:

'ne Stringliste zum Laden der Dateien per Schleife:

Delphi-Quellcode:
sl.LoadFromFile(od.FileName);
sl.Text := AnsiReplaceText(sl.Text,'TTable','TAdoTable'); // Ist nicht das Schnellste, für 'nen Einmaljob aber ausreichend.
sl.SaveToFile(od.FileName);
Eventuell noch vor dem Schreiben ein Backup der alten Datei machen.

Aufwand: halbe Stunde mit testen, Vorteil:

Du kannst das Programm um weitere Ersetzungen anpassen.

jfheins 1. Dez 2008 16:21

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Ich glaube, die GExperts bieten etws in der Richtung :gruebel:

Sherlock 1. Dez 2008 17:05

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Bieten sie, aber es ist doch etwas hakelig und fehlerhaft.

Ich bin bisher mit Suchen&Ersetzen in DFM und PAS ganz gut gefahren.

Sherlock

Hansa 1. Dez 2008 17:08

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Wenn das nicht mal mit Refactory gehen sollte, dann erkläre mir mal einer wozu das Ganze dann gut ist. :shock:

nahpets 1. Dez 2008 17:12

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von Hansa
Wenn das nicht mal mit Refactory gehen sollte, dann erkläre mir mal einer wozu das Ganze dann gut ist. :shock:

Gibt's ab welcher Delphiversion?
Mein Delphi ist fast so alt wie ich ;-)

Hansa 1. Dez 2008 17:22

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Dürfte D2005 sein. Ich wundere mich allerdings echt darüber, dass das keiner nutzt oder gar davon weiß. Das betrifft auch Nutzer von D2006 pro oder Turbo Delphi (zumindest ohne Angabe von Trial-Version). Das vor dem Hintergrund : "eeeendlich kann Delphi auch Refactoring" :mrgreen:

Meflin 1. Dez 2008 17:26

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jupp, es gibt tatsächlich eine entsprechende Refactoring-Methode dafür (siehe Anhang) - mit deinem Delphi 7 wirst du da allerdings nicht glücklich ;)

EDatabaseError 1. Dez 2008 18:08

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Bin ich dann froh das ich D2008 hab :D

aahm zum von Hand machen. ich hab damit angefangen aber nach 5 stunden hats dann auch kein Spass mehr gemacht ;)..

Das mit dem Refactoring an das hab ich garnich gedacht. Aber da gehen imho auch nich so sachen wie das er Eigenschaften hinzufügt oder anpasst dann an den Komponenten. Für sowas ist dann wohl doch selberschreiben angesagt?

Tobi

DeddyH 1. Dez 2008 18:09

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von EDatabaseError
Bin ich dann froh das ich D2008 hab

Das mag ich nicht so ganz glauben :mrgreen:

EDatabaseError 1. Dez 2008 18:13

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
:oops: seit halt nich so genau :D das RAD Studio eben ;)

EDatabaseError 3. Jan 2009 21:10

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von nahpets
Hallo,

ja, dass habe ich auch schon gesucht (und nicht gefunden).

Schnellschussantwort:

UltraEdit und über alle *.pas und *.dfm-Dateien ein Globalchange absetzen. (Es darf auch ein anderer Editor sein ;-))
Da TTable und TAdoTable nicht so ganz kompatibel sind, musst Du aber bei so einem globalen Ersetzen mit einer nicht unerheblichen "Fehlermenge" rechnen, wobei die Unterschiede bei TQuery und TAdoQuery wohl größer sind.

Alternative: selbstschreiben:

OpenDialog mit Multiselect:

'ne Stringliste zum Laden der Dateien per Schleife:

Delphi-Quellcode:
sl.LoadFromFile(od.FileName);
sl.Text := AnsiReplaceText(sl.Text,'TTable','TAdoTable'); // Ist nicht das Schnellste, für 'nen Einmaljob aber ausreichend.
sl.SaveToFile(od.FileName);
Eventuell noch vor dem Schreiben ein Backup der alten Datei machen.

Aufwand: halbe Stunde mit testen, Vorteil:

Du kannst das Programm um weitere Ersetzungen anpassen.

Ich muss das ganze jetzt nochmal rauskramen^^.. Wollte das jetzt mit UltraEdit machen da es mit selbergeschrieben oder Refactor nicht ordentlich geklappt hat.
Nur wenn ich die Datei in UltraEdit öffne wird die dfm Datei nicht korrekt dargestellt. Kann ich irgentwas an UltraEdit verdrehen oder gibt es eine andere Möglichkeit alle DFMs in das Text DFM Format zu wandeln?

Tobi

Namenloser 3. Jan 2009 21:35

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von Meflin
Jupp, es gibt tatsächlich eine entsprechende Refactoring-Methode dafür (siehe Anhang) - mit deinem Delphi 7 wirst du da allerdings nicht glücklich ;)

Das funktioniert aber nur für selbstdeklarierte Klassen, nehme ich an?

EDatabaseError 3. Jan 2009 21:49

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Jaa..aber Refactoring muss man auch jedes mal neu anschucken.. und bei 81 DFMs ;)..
Hab noch nicht die optimale Lösung gefunden :/

Michael Habbe 3. Jan 2009 22:39

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Mal überlegen...
Ich habe 1999 eine Anwendung unter Delphi 2 mit über 300 (!) Formularen von TTable auf TAdsTable umgestellt. Dazu musste ich jedes Formular einzeln erstmal öffnen, um sicherzustellen, dass es auch als Text gespeichert wurde. Das heisst, konnte es auf Text umgestellt werden? :gruebel: Ich weiss nicht mehr. Kann auch sein, dass ich die Ersetzmethode von Delphi benutzt habe.

Nun bin ich mir nicht mehr sicher, aber dadurch, dass ich jedes Formular einzeln angreifen musste, habe ich wie kein anderer die Anwendung kennengelernt. :shock:

Es mussten einige Dinge angepasst werden: Typ, Database, Tabellenname, Filter, Optionen, ...

Dann bleiben da natürlich Dinge auf der Strecke, die erst hinterher auffallen beim Compilieren oder noch später: die Dinge, die zur Laufzeit erzeugt werden, wie z.B. Mehrfachnutzung einer Table mit Setzen der Eigenschaften zur Laufzeit.


Leider kann ich nicht mehr sagen, wie lange ich dabeigesessen habe. Aber so 2 Monate waren das bestimmt.

Hawkeye219 3. Jan 2009 22:54

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Hallo Tobias,

Zitat:

Zitat von EDatabaseError
Kann ich irgentwas an UltraEdit verdrehen oder gibt es eine andere Möglichkeit alle DFMs in das Text DFM Format zu wandeln?

im bin-Verzeichnis deiner Delphi-Installation sollte sich ein Programm namens "convert.exe" befinden, das Formulare vom Binär- ins Textformat (und zurück) konvertieren kann. Wenn du es ohne Parameter aufrufst, erscheint eine kleine Hilfe.

Gruß Hawkeye

fkerber 3. Jan 2009 22:57

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Hi!

Jenachdem was schneller geht, tut es auch ein Rechtsklick im Formular und dort dann das Häkchen bei Text-DFM!


Ciao, Frederic

EDatabaseError 3. Jan 2009 23:31

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Bei 81 Dateien lohnt es sich convert zu nutzen. Einfacher Aufruf per convert -i -t C:\Delphiprojekt\*
Funktioniert spitze.

Tobi

Sunlight7 4. Jan 2009 03:12

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von Michael Habbe
Das heisst, konnte es auf Text umgestellt werden? :gruebel:

Nö, kann es nicht

Bebe 4. Jan 2009 09:57

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie schon erwähnt hat GExpert diese Funktion. Damit kannst du auch alle Dateien in einem Projekt bearbeiten, habe ich aber nie ausprobiert. Ich habe lediglich Komponente für Komponente ausgetauscht und das funktioniert tadellos.

Siehe Anhang.

Gruß
Matze

alzaimar 4. Jan 2009 11:03

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Mir hat diese GExperts-Funktion mehrmals meine Projekte zerballert, vor allen Dingen bei Fremdkomponenten. Natürlich taug so eine einmal-ERfahrung nicht als generelles Ablehnungskriterium, aber man sollte die Funktion mit Vorsicht verwenden (Stichwort: Backup).

mkinzler 4. Jan 2009 11:12

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Ein Backup sollte man auf jeden Fall machen, egal wie man die Ersetzung bewerkstelligt. Eine Low-Level-Ersetzung in den Textdateien kann das Projekt auch beschädigen

mjustin 4. Jan 2009 11:21

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von alzaimar
Mir hat diese GExperts-Funktion mehrmals meine Projekte zerballert, vor allen Dingen bei Fremdkomponenten. Natürlich taug so eine einmal-ERfahrung nicht als generelles Ablehnungskriterium, aber man sollte die Funktion mit Vorsicht verwenden (Stichwort: Backup).

Mit einem Diff-Werkzeug (zum Beispiel aus einer Versionsverwaltung) sollte man sich nach solchen Aktionen ansehen, was GExperts mit den DFM gemacht hat. Das geht natürlich einfacher, wenn man Text-DFM benutzt. Überraschenderweise hat Delphi 7 Enterprise bei uns gelegentlich aus den Text- wieder Binär-DFMs gemacht :wall: - also alles wieder rückgängi machen, auf Text-DFM zurückstellen und von vorne anfangen ...

Hansa 4. Jan 2009 12:38

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von mjustin
... Überraschenderweise hat Delphi 7 Enterprise bei uns gelegentlich aus den Text- wieder Binär-DFMs gemacht :wall: - also alles wieder rückgängi machen, auf Text-DFM zurückstellen und von vorne anfangen ...

Das war hier auch mal zu beobachten. Na und ? Convert -? und fertig. Da steht wie.

mjustin 4. Jan 2009 12:48

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von mjustin
... Überraschenderweise hat Delphi 7 Enterprise bei uns gelegentlich aus den Text- wieder Binär-DFMs gemacht :wall: - also alles wieder rückgängi machen, auf Text-DFM zurückstellen und von vorne anfangen ...

Das war hier auch mal zu beobachten. Na und ? Convert -? und fertig. Da steht wie.

Bei mir Mausschubser geht das auch über das Kontextmenü :stupid:

Hansa 4. Jan 2009 13:58

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Statt convert ?? *.dfm wohl alle DFM einzeln angeklickt ?? :mrgreen: :wall:

EDatabaseError 4. Jan 2009 14:02

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von Hansa
Statt convert ?? *.dfm wohl alle DFM einzeln angeklickt ?? :mrgreen: :wall:

Gestaltet sich bei 81 Formularen vllllt. ein bisschen zeitaufwändig :mrgreen:

Namenloser 4. Jan 2009 19:46

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
[OT]
Mal ein paar Fragen zu Binär-DFMs:
1. Was ist der Nachteil davon, wenn man nicht gerade Komponenten ersetzen muss?
2. Wie kann man die aktivieren? Ich hatte ein paar mal experimentell den Haken bei "Text-DFM" weggemacht, aber danach war das Formular immer noch im Textmodus.
Werden Binärformulare in den neueren Versionen nicht mehr unterstützt? (Hat das vielleicht auch einen Sinn?)
[/OT]

mkinzler 4. Jan 2009 19:50

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
War früher Standartformat. Heute wird aber durchgängig die Textvariante verwendet, da der kleine größenvorteil der Binärversion nicht mehr ins Gewicht fällt

Hawkeye219 4. Jan 2009 20:03

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Hallo,

für Versionskontrollsysteme sind Binärdateien eher hinderlich, da sie in der Regel nur die Differenz zweier Versionsstände speichern.

Gruß Hawkeye

Namenloser 4. Jan 2009 20:24

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Okay, das leuchtet ein :bounce1:

Michael Habbe 6. Jan 2009 00:05

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Zitat:

Zitat von NamenLozer
[OT]
Mal ein paar Fragen zu Binär-DFMs:
1. Was ist der Nachteil davon, wenn man nicht gerade Komponenten ersetzen muss?
2. Wie kann man die aktivieren? Ich hatte ein paar mal experimentell den Haken bei "Text-DFM" weggemacht, aber danach war das Formular immer noch im Textmodus.
Werden Binärformulare in den neueren Versionen nicht mehr unterstützt? (Hat das vielleicht auch einen Sinn?)
[/OT]


1. Im Programmierbetrieb habe ich zumindest bisher keine Auswirkungen gespürt.
2. Auch wenn man auf "Rechte-Maustaste" den Text-DFM aktiviert, werden die Formulare auf Umschalten mit "Rechte-Maustaste-Ansicht als Text" immmer im Textformat angezeigt. Der Unterschied liegt in der Speicherung der Formulare. Vergleiche einmal Formulare miteinander, die Du als Text bzw. Nicht-Text gespeichert hast mit einem Einfach-Texteditor Deiner Wahl.

Zumindest bei meinem Turbo Delphi Pro. kann ich den Text-DFM-Modus deaktivieren.
Ich denke mal, dass diese binäre Struktur (wie auch immer diese intern verarbeitet wird) früher hauptsächlich Speicherplatz sparen sollte.

Namenloser 6. Jan 2009 00:36

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Du hast recht, es funktioniert doch :oops:

mschaefer 6. Jan 2009 00:48

Re: Automatisches Ersetzten von VCL Komponenten in pas und d
 
Moin, moin,

zum Suchen und Ersetzen hat sich bei mir Info Rapid - Suchen und Ersetzen gut gmacht // Martin.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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-2025 by Thomas Breitkreuz