Delphiprogramm nach Lazarus portiert.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Delphiprogramm nach Lazarus portiert.
Ich hab jetzt nach etwa einer Woche Kampf mein CAD Programm von Delphi 5 nach Lazarus portiert bekommen.
Es startet zwar noch nicht und wirft mit Fehlermeldungen nur so um sich, aber es hat compiliert.
Das Programm hat mittlerweile mehr als eine halbe Million Programmzeilen.
Es startet zwar noch nicht und wirft mit Fehlermeldungen nur so um sich, aber es hat compiliert.
Das Programm hat mittlerweile mehr als eine halbe Million Programmzeilen.
Re: Delphiprogramm nach Lazarus portiert.
Ist es dann portiert?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphiprogramm nach Lazarus portiert.
Ich würde sagen ja.
Es hagelt zwar immer noch jede Menge Fehlermeldungen aber es startet zumindest schonmal und funktioniert auch in den Grundzügen.
Es hagelt zwar immer noch jede Menge Fehlermeldungen aber es startet zumindest schonmal und funktioniert auch in den Grundzügen.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Delphiprogramm nach Lazarus portiert.
Meinst du Fehlermeldungen oder Warnungen/Hinweise ?Es hagelt zwar immer noch jede Menge Fehlermeldungen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphiprogramm nach Lazarus portiert.
Warnungen und Hinweise gibt es auch jede Menge.
Es treten noch sehr viele Exceptions auf.
Es treten noch sehr viele Exceptions auf.
- photor
- Beiträge: 507
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: Delphiprogramm nach Lazarus portiert.
Hallo,
meine Erfahrung mit der Funktion Delphi-Programme/Projekte automatisch nach Lazarus zu portieren ist zwiespältig:
Photor
PS: mich würde grundsätzlich auch der umgekehrte Weg interessieren: also von Lazarus nach Delphi. Aber … s.o.
meine Erfahrung mit der Funktion Delphi-Programme/Projekte automatisch nach Lazarus zu portieren ist zwiespältig:
- ich habe das jetzt ein paar mal probiert und festgestellt, dass der Code (.pas-Files) recht gut übertragen werden.
- Bei den GUI-Files (.lfm bzw. .dfm) ist es mir noch nicht wirklich gelungen, ein Projekt fehlerlos in Lazarus zu importieren. Es werden zwar lfm-Files generiert, die aber wohl nicht fehlerfrei sind; ohne die dfm-Files funktioniert das Projekt nicht (sie zu löschen, war ein Fehler
).
- Das Projekt (die GUI) dann unter Lazarus weiter zu entwickeln, war nicht wirklich möglich (ich denke, weil die .lfm nicht alle Infos enthielten, die noch aus den .dfms geholt wurden - habe ich aber nicht geprüft)
- Folge: ich habe das GUI in Lazarus nachgebaut.
- Also, wenn ich ein Delphi-Projekt in Lazarus brauche, dann GUI stückweise nach bauen und den zugehörigen Code hinzu packen. Das dann Stück für Stück - alles andere ist hier sonst im Chaos geendet.
Photor
PS: mich würde grundsätzlich auch der umgekehrte Weg interessieren: also von Lazarus nach Delphi. Aber … s.o.
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Delphiprogramm nach Lazarus portiert.
Die Basis sollte immer mit einer Sourceverwaltung gemacht werden. Damit kann man jeden Schritt wieder wiederholen wenn es nötig wird.
Vor allen sollte man nach dem ersten Try ein Review machen und Analysieren wo Delphi und Lazarus so unterschiedlich sind. Lazarus kann auch IMHO mit dfm Files betrieben werden. Und die automatische Umwandlung kann auch keine Hexerei vollbringen. Manchmal ist es besser das ganze mit bedingter Kompilierung selbst zu machen.
Das gilt auch für die umgekehrte Richtung.
Vor allen sollte man nach dem ersten Try ein Review machen und Analysieren wo Delphi und Lazarus so unterschiedlich sind. Lazarus kann auch IMHO mit dfm Files betrieben werden. Und die automatische Umwandlung kann auch keine Hexerei vollbringen. Manchmal ist es besser das ganze mit bedingter Kompilierung selbst zu machen.
Das gilt auch für die umgekehrte Richtung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- photor
- Beiträge: 507
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: Delphiprogramm nach Lazarus portiert.
Jup, natürlich. Ist hier Git. Aber da die .DFM nicht zum Lazarus-Projekt-gehörig identifiziert waren ,,,af0815 hat geschrieben: So 2. Jul 2023, 21:02 Die Basis sollte immer mit einer Sourceverwaltung gemacht werden. Damit kann man jeden Schritt wieder wiederholen wenn es nötig wird.
Ich bin dem damals nicht nach gestiegen. Es war offensichtlich so, dass die .DFM-Files wohl tatsächlich noch zusätzliche Infos enthalten haben - die waren nach dem Löschen halt weg und das Projekt wollte nicht mehr. Ich hatte das so nicht erwartet.af0815 hat geschrieben: So 2. Jul 2023, 21:02 Vor allen sollte man nach dem ersten Try ein Review machen und Analysieren wo Delphi und Lazarus so unterschiedlich sind. Lazarus kann auch IMHO mit dfm Files betrieben werden. Und die automatische Umwandlung kann auch keine Hexerei vollbringen. Manchmal ist es besser das ganze mit bedingter Kompilierung selbst zu machen.
Das gilt auch für die umgekehrte Richtung.
Aber ich mag so eine Vermischung auch nicht (Files, die ich mit dem eine Tool bearbeiten kann/muss und mit dem anderen nicht ... neben einander ... Brrrr Nee). Daher die Entscheidung, es lieber geschlossen in Lazarus zu machen - gilt auch für den Rückweg.
Ciao,
Photor
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphiprogramm nach Lazarus portiert.
Die automatische Konvertierung der dfm -> lfm hat nicht funktioniert.
Ich bin jede einzelne Unit durchgegangen und hab die einzeln konvertiert.
Es war bei vielen Formularen dann auch noch manuelle Nacharbeit nötig. (Beispielsweise haben alle TBitBtn ihre Eigenschaft Caption und ModalResult verloren)
Auch arbeite ich sehr viel mit dem VirtualStringTree. Bei dem waren alle Columns weg und die Assembler Methode PackArray hat Segfaults produziert usw.
Die manuell nachbearbeiteten Formulare funktionieren jetzt aber einwandfrei.
Ich muss jetzt halt noch nach den 694 Compilerwarnungen schauen.
Der Delphi 5 Compiler hat das Projekt mit 0 Warnungen und 0 Hints compiliert.
Da das letzte Update von Delphi5 so ca. von 1998 ist und ich gerne auch 64 Bit Programme machen will, evtl. auch für Mac OS und Linux, ist es mir den Aufwand aber wert.
FPC ist aber auch zimperlich
Ich bin jede einzelne Unit durchgegangen und hab die einzeln konvertiert.
Es war bei vielen Formularen dann auch noch manuelle Nacharbeit nötig. (Beispielsweise haben alle TBitBtn ihre Eigenschaft Caption und ModalResult verloren)
Auch arbeite ich sehr viel mit dem VirtualStringTree. Bei dem waren alle Columns weg und die Assembler Methode PackArray hat Segfaults produziert usw.
Die manuell nachbearbeiteten Formulare funktionieren jetzt aber einwandfrei.
Ich muss jetzt halt noch nach den 694 Compilerwarnungen schauen.
Der Delphi 5 Compiler hat das Projekt mit 0 Warnungen und 0 Hints compiliert.
Da das letzte Update von Delphi5 so ca. von 1998 ist und ich gerne auch 64 Bit Programme machen will, evtl. auch für Mac OS und Linux, ist es mir den Aufwand aber wert.
FPC ist aber auch zimperlich

Re: Delphiprogramm nach Lazarus portiert.
Lazarus kann auch mit dfm umgehen, im Gegensatz zu Delphi, das lfm nicht kennt. Dennoch erscheint es mir absolut sinnvoll, für Lazarus immer eine eigene Version der Formulare als lfm zu verwenden, da man jeweils Properties aus der entsprechenden Datei herauslöschen muss. Durch ein
wird dann sichergestellt, dass Lazarus nur die lfm, Delphi nur die dfm-Version des Formulars zu Gesicht bekommt.
Das ist die einzige Möglichkeit, dass man ein Projekt sowohl in Delphi als auch in Lazarus verwenden kann. Vorteil ist, dass man in der lfm-Version schöne Features von Lazarus wie das Anchoring anbringen kann, ohne dass Delphi das mitkriegt. Nachteil ist, dass es etwas umständlich wird, wenn man im Lauf der Entwicklung Komponenten verändert oder einfügt/löscht - da muss man dann die jeweils andere Version nachkorrigieren (was außerhalb der IDE erfolgen muss, da z.B. beim Einfügen einer neuen Komponente diese schon in der pas-Datei erwähnt ist, aber in der dfm/lfm-Datei der jeweils anderen "Welt" nicht nicht vorhanden ist.).
Inkompatible Properties muss man im Quellcode durch bedingte Kompilierung setzen. Genauso Komponenten, die in der jeweils anderen Version nicht bekannt sind.
Auf CCR habe ich drei neue Packages, NiceGrid, NiceChart und NiceSidebar, die sowohl in Delphi als auch Lazarus verwendet werden können.
Die automatische Formular- und Projekt-Konvertierung verwende ich eigentlich nie, weil ich nie weiß, was geschieht. Und letztendlich ist die manuelle Umwandlung auch relativ einfach:
- Projekt-Datei auf .lpr umbenennen. In der Uses-Liste "Interfaces" an den Anfang setzen. In der Nennung des Hauptformulars den seltsamen Zusatz "in unit1.pas {Form1}" anbringen, sonst wird es in Delphi nicht erkannt.
- dfm-Datei kopieren und in lfm umbenennen. Delphi-spezifische Properties wie "ExplicitLeft", etc entfernen.
- in der pas-Datei den Zusatz das {$R *.dfm} durch {$IFDEF FPC}{$R *.lfm}{$ELSE}{$R *.dfm}{$ENDIF} ersetzen. Am Kopf der Unit ein {$MODE Delphi}, umgeben von einem {$IFDEF FPC}...{$ENDIF} einfügen.
- Wenn ich mich richtig erinnere, kann nun schon der Compiler mit seiner Arbeit beginnen.
- Um die Unit cross-platform zu machen, die Units Windows und Messages durch LCLIntf, LCLType und LMessages ersetzen (oder einfach weglassen, sie sind oft nicht nötig). Wenn die Unit Message-Handler enthält, die Messagetypen TWMxyz durch die entsprechenden Lazarus-Typen TLMxyz ersetzen, die Messagebezeichnern WM_xyz durch LM_xyz).
Code: Alles auswählen
{$IFDEF FPC}{$R *.lfm}{$ELSE}{$ENDIF}
Das ist die einzige Möglichkeit, dass man ein Projekt sowohl in Delphi als auch in Lazarus verwenden kann. Vorteil ist, dass man in der lfm-Version schöne Features von Lazarus wie das Anchoring anbringen kann, ohne dass Delphi das mitkriegt. Nachteil ist, dass es etwas umständlich wird, wenn man im Lauf der Entwicklung Komponenten verändert oder einfügt/löscht - da muss man dann die jeweils andere Version nachkorrigieren (was außerhalb der IDE erfolgen muss, da z.B. beim Einfügen einer neuen Komponente diese schon in der pas-Datei erwähnt ist, aber in der dfm/lfm-Datei der jeweils anderen "Welt" nicht nicht vorhanden ist.).
Inkompatible Properties muss man im Quellcode durch bedingte Kompilierung setzen. Genauso Komponenten, die in der jeweils anderen Version nicht bekannt sind.
Auf CCR habe ich drei neue Packages, NiceGrid, NiceChart und NiceSidebar, die sowohl in Delphi als auch Lazarus verwendet werden können.
Die automatische Formular- und Projekt-Konvertierung verwende ich eigentlich nie, weil ich nie weiß, was geschieht. Und letztendlich ist die manuelle Umwandlung auch relativ einfach:
- Projekt-Datei auf .lpr umbenennen. In der Uses-Liste "Interfaces" an den Anfang setzen. In der Nennung des Hauptformulars den seltsamen Zusatz "in unit1.pas {Form1}" anbringen, sonst wird es in Delphi nicht erkannt.
- dfm-Datei kopieren und in lfm umbenennen. Delphi-spezifische Properties wie "ExplicitLeft", etc entfernen.
- in der pas-Datei den Zusatz das {$R *.dfm} durch {$IFDEF FPC}{$R *.lfm}{$ELSE}{$R *.dfm}{$ENDIF} ersetzen. Am Kopf der Unit ein {$MODE Delphi}, umgeben von einem {$IFDEF FPC}...{$ENDIF} einfügen.
- Wenn ich mich richtig erinnere, kann nun schon der Compiler mit seiner Arbeit beginnen.
- Um die Unit cross-platform zu machen, die Units Windows und Messages durch LCLIntf, LCLType und LMessages ersetzen (oder einfach weglassen, sie sind oft nicht nötig). Wenn die Unit Message-Handler enthält, die Messagetypen TWMxyz durch die entsprechenden Lazarus-Typen TLMxyz ersetzen, die Messagebezeichnern WM_xyz durch LM_xyz).
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Delphiprogramm nach Lazarus portiert.
Danke für die ausführliche Beschreibung.
Langfistig will ich das Programm mit Lazarus weiterpflegen.
Also habe ich eine Berücksichtigung von Delphi da auch herausgelassen.
Interessant ist die Wunderwaffe GIT.
Ich habe ja einen Branch Lazarus und einen master. Im master ist der orginale Delphi Quellcode.
In diesem Branch hatte ich einige Änderungen gemacht und die konnte ich vollkommen problemlos in den Lazarus Branch mergen.
Langfistig will ich das Programm mit Lazarus weiterpflegen.
Also habe ich eine Berücksichtigung von Delphi da auch herausgelassen.
Interessant ist die Wunderwaffe GIT.
Ich habe ja einen Branch Lazarus und einen master. Im master ist der orginale Delphi Quellcode.
In diesem Branch hatte ich einige Änderungen gemacht und die konnte ich vollkommen problemlos in den Lazarus Branch mergen.