AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi D7-Komponenten nach D2005 portieren
Tutorial durchsuchen
Ansicht
Themen-Optionen

D7-Komponenten nach D2005 portieren

Ein Tutorial von CalganX · begonnen am 30. Dez 2004 · letzter Beitrag vom 22. Jan 2006
Antwort Antwort
CalganX
Registriert seit: 21. Jul 2002
Dieser Artikel ist keine Lösung, die immer funktioniert!!!

Im Moment plage ich mich damit rum, dass ich Komponenten als Delphi 7 im neuen Delphi 2005 benötige, die vom Autor/von den Autoren noch nicht auf die neue Version vorbereitet wurden. Ich habe inzwischen einige Komponenten portieren können und das lief meistens nach diesem Schema ab. Ich betone nochmal, dass diese Lösung nicht immer funktionieren wird, sondern nur ein trivialen bis mittleren Fällen (einfache Komponenten bis hin zu Komponenten, die noch mit den Design-Editoren rumspielen [müssen]). Außerdem gehe ich davon aus, dass die Komponente unter Delphi 7 einwandfrei kompiliert und funktioniert hat. Es also kein Problem mit den Designeditoren (sprich den entsprechenden Units) gibt. Wer damit ein Problem hat sollte sich erstmal an Suche wenden.

Häufig liegt bei Komponenten eine Datei bei, in der alle Compilerversionen definiert sind. Diese heißt häufig Compilers.inc oder so ähnlich. Darin muss sollte für alle Fälle erstmal eine Definition für die neue Delphi-Version angelegt werden. Ich habe es mir immer einfach gemacht und die D7-Definition einfach kopiert und korrigiert.
Beispiel:
Delphi-Quellcode:
{VORHER:}
    {$ifdef VER150}
      {$define COMPILER_7}
      {$define DELPHI}
      {$define DELPHI_7}
    {$endif}

{NACHHER:}
    {$ifdef VER170}
      {$define COMPILER_9}
      {$define DELPHI}
      {$define DELPHI_9}
    {$endif}

    {$ifdef VER150}
      {$define COMPILER_7}
      {$define DELPHI}
      {$define DELPHI_7}
    {$endif}
Das muss allerdings in der gesamten Datei gemacht werden, denn häufig werden auch noch Defines wie COMPILER_7_UP erstellt, diese sollten dann auch für D2005 definiert werden.

Jetzt geht es relativ einfach weiter. Dupliziert die Packages für D7 einfach im Explorer (markieren, STRG+C, STRG+V) und benennt die Dateien um. Am sinnvollsten ist, in der bisherigen Form der Bennung weiterzumachen. Also aus VirtualTreesD7D.dpk sollte VirtualTreesD9D.dpk gemacht werden. Achtet darauf, dass ihr das sowohl bei Design- als auch bei den Runtime-Packages macht.
Nun werden die DPK-Dateien in Delphi geöffnet. Es sollte sich der Import-Assistent öffnen und fragen, ob das Paket für Delphi für .NET oder Win32 aufbereitet werden soll. Wählt dabei den Eintrag Delphi für Win32 aus und klickt auf OK. Im Projektmanager (standardmäßig auf der rechten Seite der IDE) nun ein Rechtsklick auf die BPL-Datei (z.B. VirtualTreesD9D.bpl) und "Quelltext anzeigen" anklicken. In der Datei sollte jetzt erstmal oben der Dateiname angepasst werden (aus der Sieben wieder eine Neun machen). In Designpackages muss u.U. noch bei den requires-Angaben eine Zahl ausgetauscht werden. Das gleiche wieder u.U. bei Runtimepackages machen.
Dann sollte alles fertig sein. Alles speichern und ganz normal Kompilieren und Installieren, wie bei D7 und anderen D9-Paketen auch.

Delphi legt noch ziemlich viel Müll ab, deswegen könnt ihr (hat bei mir bisher zu keinen Fehlern geführt) diese Dateien löschen: *.bdsproj.local, *.cfg und das Verzeichnis ModelSupport, sofern ihr keine Modellansichten braucht.

Ich hoffe, dass ich jetzt nicht schon wieder irgendwelche Fehler gemacht habe und das bei euch funktioniert. Bisher habe ich das bei folgenden Komponenten geschafft: VirtualTrees (aka VST), Aducom SQLite, ...

Hoffe dass es bei euch auch soweit funktioniert,
Chris
 
Robert_G
 
#2
  Alt 7. Jan 2005, 20:32
Zitat von Chakotay1308:
Dupliziert die Packages für D7 einfach im Explorer (markieren, STRG+C, STRG+V) und benennt die Dateien um. Am sinnvollsten ist, in der bisherigen Form der Bennung weiterzumachen. Also aus VirtualTreesD7D.dpk sollte VirtualTreesD9D.dpk gemacht werden. Achtet darauf, dass ihr das sowohl bei Design- als auch bei den Runtime-Packages macht.
Das ist IMHO nicht notwendig. Man sollte Code möglichst wiederverwenden. NICHT kopieren.
Delphi8 & 2005 legen in deinen "Eigenen Dateien" den Ordner "BDS Projects" o.ä. an. Darin kannst du ja einen Ordner Library packen.
Dem spendierst du die Unterordner DCU & Output. In den Optionen setzt du jetzt die DCU- & Outputpfade standardmäßig auf diese Ordner.
Ich habe unter Library ein D7, D8 und D2005 stehen. Darunter erst die DCUs und den Output.
Schon kommen sich Units,Packages,Echsen,... , die von verschiedenen Delphi-Versionen kompiliert wurden, nicht mehr in die Quere. Außerdem musst du nur die 2 Ordner als Suchpfad global definieren. Das spart das nervige Anpassen der Suchpfade

Zitat von Chakotay1308:
In Designpackages muss u.U. noch bei den requires-Angaben eine Zahl ausgetauscht werden. Das gleiche wieder u.U. bei Runtimepackages machen.
Im Normalfall reicht es die Einträge von Delphi-System-Packages á la vclXX,rtlXX & Co zu entfernen. (Die landen dort im kompilierten Package sowieso, falls VCL,... verwendet werden).
Werden andere Packages benötigt muss man sie auch fit für mehrere Dephi-Versionen machen.

Zitat von Chakotay1308:
Dann sollte alles fertig sein. Alles speichern und ganz normal Kompilieren und Installieren, wie bei D7 und anderen D9-Paketen auch.
Genau deshalb. Compiler-spezifische Dinge (zum Bleistift ein Enumerator in einer Collection, oder die DesignTime-Editoren in D<6) können bedingt kompiliert werden.
Ansonsten läuft der gleiche Code überall.

Zitat von Chakotay1308:
Delphi legt noch ziemlich viel Müll ab, deswegen könnt ihr (hat bei mir bisher zu keinen Fehlern geführt) diese Dateien löschen: *.bdsproj.local, *.cfg und das Verzeichnis ModelSupport, sofern ihr keine Modellansichten braucht.
*.local bedeutet, dass im Anwendungsverzeichnis zuerst nach typbibliotheken gesucht werden soll. Das ist also nicht immer Müll. Die *.cfg enthaltren deine Projekteinstellungen -> auch kein Müll.

Zitat von Chakotay1308:
Ich hoffe, dass ich jetzt nicht schon wieder irgendwelche Fehler gemacht habe und das bei euch funktioniert. Bisher habe ich das bei folgenden Komponenten geschafft: VirtualTrees (aka VST), Aducom SQLite, ...
Sicher funktioniert dein Weg, aber du hast jetzt doppelten Code, das macht Änderungen/Aktualisierungen nervig.
  Mit Zitat antworten Zitat
CalganX

 
Turbo Delphi für Win32
 
#3
  Alt 7. Jan 2005, 20:43
Hi Robert,
Zitat von Robert_G:
Zitat von Chakotay1308:
Dupliziert die Packages für D7 einfach im Explorer (markieren, STRG+C, STRG+V) und benennt die Dateien um. Am sinnvollsten ist, in der bisherigen Form der Bennung weiterzumachen. Also aus VirtualTreesD7D.dpk sollte VirtualTreesD9D.dpk gemacht werden. Achtet darauf, dass ihr das sowohl bei Design- als auch bei den Runtime-Packages macht.
Das ist IMHO nicht notwendig. Man sollte Code möglichst wiederverwenden. NICHT kopieren.
Ich sprach ja auch davon nur die Packages zu duplizieren und die Sourcen an sich zu behalten. Oder habe ich jetzt was falsch verstanden? Die Sourcen werden ja an sich wiederverwendet.
Zitat von Robert_G:
Delphi8 & 2005 legen in deinen "Eigenen Dateien" den Ordner "BDS Projects" o.ä. an. Darin kannst du ja einen Ordner Library packen.
Dem spendierst du die Unterordner DCU & Output. In den Optionen setzt du jetzt die DCU- & Outputpfade standardmäßig auf diese Ordner.
Ich habe unter Library ein D7, D8 und D2005 stehen. Darunter erst die DCUs und den Output.
Schon kommen sich Units,Packages,Echsen,... , die von verschiedenen Delphi-Versionen kompiliert wurden, nicht mehr in die Quere. Außerdem musst du nur die 2 Ordner als Suchpfad global definieren. Das spart das nervige Anpassen der Suchpfade
Hm. Das sei jedem selber überlassen. Ich habe den Ordner mit den Komponenten, so wie ich sie heruntergeladen und entpackt habe und meine BPLs liegen dort, wo Delphi das standardmäßig hinpackt. Ich habe generell andere Dinge zu tun, als mich mit installierten Komponenten zu beschäftigen.

Zitat von Robert_G:
Zitat von Chakotay1308:
In Designpackages muss u.U. noch bei den requires-Angaben eine Zahl ausgetauscht werden. Das gleiche wieder u.U. bei Runtimepackages machen.
Im Normalfall reicht es die Einträge von Delphi-System-Packages á la vclXX,rtlXX & Co zu entfernen. (Die landen dort im kompilierten Package sowieso, falls VCL,... verwendet werden).
Werden andere Packages benötigt muss man sie auch fit für mehrere Dephi-Versionen machen.
Okay, das ist auch eine Möglichkeit. Aber wenn man nur auf die Schnelle sein Projekt 2005-Fertig machen will, dann reicht das ja.

Zitat von Robert_G:
Zitat von Chakotay1308:
Dann sollte alles fertig sein. Alles speichern und ganz normal Kompilieren und Installieren, wie bei D7 und anderen D9-Paketen auch.
Genau deshalb. Compiler-spezifische Dinge (zum Bleistift ein Enumerator in einer Collection, oder die DesignTime-Editoren in D<6) können bedingt kompiliert werden.
Ansonsten läuft der gleiche Code überall.
Ich habe ja auch bewusst geschrieben, dass ich davon ausgehe, dass die Komponente unter Delphi 7 funktioniert hat, um nicht erst noch die Anpassung zu beschrieben, die gemacht werden muss damit die DesignTime-Editoren funktionieren.

Zitat von Robert_G:
Zitat von Chakotay1308:
Delphi legt noch ziemlich viel Müll ab, deswegen könnt ihr (hat bei mir bisher zu keinen Fehlern geführt) diese Dateien löschen: *.bdsproj.local, *.cfg und das Verzeichnis ModelSupport, sofern ihr keine Modellansichten braucht.
*.local bedeutet, dass im Anwendungsverzeichnis zuerst nach typbibliotheken gesucht werden soll. Das ist also nicht immer Müll. Die *.cfg enthaltren deine Projekteinstellungen -> auch kein Müll.
Im Normalfall braucht man beides nicht. Außer vielleicht die *.cfg-Datei. Korrigier mich wenn ich falsch liege, aber die beiden Dateien würde ich eher bei normalen Projekten benötigen.

Zitat von Robert_G:
Zitat von Chakotay1308:
Ich hoffe, dass ich jetzt nicht schon wieder irgendwelche Fehler gemacht habe und das bei euch funktioniert. Bisher habe ich das bei folgenden Komponenten geschafft: VirtualTrees (aka VST), Aducom SQLite, ...
Sicher funktioniert dein Weg, aber du hast jetzt doppelten Code, das macht Änderungen/Aktualisierungen nervig.
s.o.

Chris
  Mit Zitat antworten Zitat
Robert_G
 
#4
  Alt 7. Jan 2005, 21:05
Zitat von Chakotay1308:
Ich sprach ja auch davon nur die Packages zu duplizieren und die Sourcen an sich zu behalten. Oder habe ich jetzt was falsch verstanden? Die Sourcen werden ja an sich wiederverwendet.
Ich habe es gelesen und sogar zitiert, trotzdem kam es wohl bei mir nicht an... -> Du hast natürlich recht.
Zitat von Chakotay1308:
Zitat von Robert_G:
Delphi8 & 2005 legen in deinen "Eigenen Dateien" den Ordner "BDS Projects" o.ä. an. Darin kannst du ja einen Ordner Library packen.
Dem spendierst du die Unterordner DCU & Output. In den Optionen setzt du jetzt die DCU- & Outputpfade standardmäßig auf diese Ordner.
Ich habe unter Library ein D7, D8 und D2005 stehen. Darunter erst die DCUs und den Output.
Schon kommen sich Units,Packages,Echsen,... , die von verschiedenen Delphi-Versionen kompiliert wurden, nicht mehr in die Quere. Außerdem musst du nur die 2 Ordner als Suchpfad global definieren. Das spart das nervige Anpassen der Suchpfade
Hm. Das sei jedem selber überlassen.
Sicher...
Zitat von Chakotay1308:
Ich habe den Ordner mit den Komponenten, so wie ich sie heruntergeladen und entpackt habe und meine BPLs liegen dort, wo Delphi das standardmäßig hinpackt.
Das wäre der Projektordner...
Zitat von Chakotay1308:
Ich habe generell andere Dinge zu tun, als mich mit installierten Komponenten zu beschäftigen.
Genau deshalb ist ein zentraler Platz für Kompilate ganz praktisch.
Aber das sind nur meine 2 cents und keine für jeden dringend zu befolgenden Vorschriften.
  Mit Zitat antworten Zitat
aducom
 
#5
  Alt 11. Jan 2005, 09:06
Hi,

I don't have Delphi 2005. If you have a working source for it then I'll be interested in the changes. I would appreciate if you post it to support at aducom dot com. I can apply the changes to the official source.

albert
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

 
Delphi 10.4 Sydney
 
#6
  Alt 21. Jan 2006, 22:06
Kann man das Tutorial aktualisieren das es auch für D2006 gilt?
  Mit Zitat antworten Zitat
CalganX

 
Turbo Delphi für Win32
 
#7
  Alt 22. Jan 2006, 02:00
Hi,
theoretisch ließe sich das machen, aber ich habe kein Delphi 2006 und weiß nicht, ob es da was spezielles zu beachten gibt. Aber i.A. sollte es so sein, dass obiges von jeder Delphi-Version zu einer beliebigen höheren funktioniert (ausgenommen Delphi 8 und alle .NET- und non-D-Win32-Projekte).

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

 
Delphi 10.4 Sydney
 
#8
  Alt 22. Jan 2006, 09:51
Für D2006 wäre folgende Ergänzung nötig:

Delphi-Quellcode:
{$ifdef VER180}
  {$define COMPILER10}
  {$define DELPHI}
  {$define DELPHI10}
{$endif}
Je nach Komponenten kommt noch sowas in der Art hinzu (z. B. Jedi)

Delphi-Quellcode:

{$IFDEF DELPHI10}
  {$DEFINE DELPHI10_UP}
  {$DEFINE DELPHI9_UP}
  {$DEFINE DELPHI8_UP}
  {$DEFINE DELPHI7_UP}
  {$DEFINE DELPHI6_UP}
  {$DEFINE DELPHI5_UP}
  {$DEFINE DELPHI4_UP}
  {$DEFINE DELPHI3_UP}
  {$DEFINE DELPHI2_UP}
  {$DEFINE DELPHI1_UP}
{$ENDIF}

{$ifdef COMPILER10}
  {$define COMPILER6_UP}
  {$define COMPILER7_UP}
  {$define COMPILER8_UP}
  {$define COMPILER9_UP}
  {$define COMPILER10_UP}
{$endif}
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:12 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