Delphiprogramm nach Lazarus portiert.

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Delphiprogramm nach Lazarus portiert.

Beitrag von fliegermichl »

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.

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Delphiprogramm nach Lazarus portiert.

Beitrag von hum4n0id3 »

Ist es dann portiert?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
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.

Beitrag von fliegermichl »

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.

Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Delphiprogramm nach Lazarus portiert.

Beitrag von Mathias »

Es hagelt zwar immer noch jede Menge Fehlermeldungen
Meinst du Fehlermeldungen oder Warnungen/Hinweise ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
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.

Beitrag von fliegermichl »

Warnungen und Hinweise gibt es auch jede Menge.
Es treten noch sehr viele Exceptions auf.

Benutzeravatar
photor
Beiträge: 445
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Delphiprogramm nach Lazarus portiert.

Beitrag von photor »

Hallo,

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.
Ciao,
Photor

PS: mich würde grundsätzlich auch der umgekehrte Weg interessieren: also von Lazarus nach Delphi. Aber … s.o.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
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.

Beitrag von af0815 »

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
photor
Beiträge: 445
Registriert: Mo 24. Jan 2011, 21:38
OS, Lazarus, FPC: Arch Linux: L 2.2.6 FPC 3.2.2 (Gtk2)
CPU-Target: 64Bit

Re: Delphiprogramm nach Lazarus portiert.

Beitrag von photor »

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.
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
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.
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.

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

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
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.

Beitrag von fliegermichl »

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 :-)

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: Delphiprogramm nach Lazarus portiert.

Beitrag von wp_xyz »

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

Code: Alles auswählen

{$IFDEF FPC}{$R *.lfm}{$ELSE}{$ENDIF}
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).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1436
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.

Beitrag von fliegermichl »

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.

Antworten