Lazarus(LCL) auf MacOS?

Antworten
Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Lazarus(LCL) auf MacOS?

Beitrag von Soner »

Gibt es hier jemanden, der Lazarus erfolgreich auf Mac verwendet?
Ich meine so richtige Datenbank-Anwendung mit verschiedenen Komponenten, nicht nur auschließlich mit Standardkomponenten wie TEdit, TButton.

Ich versuche mein Programm auf Mac zu portieren, egal wo ich was verwende es gibt überall Bugs und Fehler, z.B.:
-TIpHTMLPanel es gibt kein Druckfunktion, es stürzt ab.
-TDateTimePicker Popupfenster erscheint meistens im Hintergrund des Forms bei Cocoa und Carbon, bei QT scheint es zu Funktionieren.
-Bei DBGrid werden Scrollbalken bei QT-Widgetset doppelt gezeichnet.
-Und einige andere die ich jetzt nicht im Kopf habe.
Egal welche Widgetset man nimmt was bei einem funktioniert funktioniert bei anderem nicht.
Getestet mit MacOS Leopard, Lion, Mountain Lion und Sierra (in Virtualbox und auf echtem Mac).

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Lazarus(LCL) auf MacOS?

Beitrag von Warf »

Alles was nicht visuell ist funktioniert wunderbar. Cocoa ist noch nicht im Ansatz komplett implementiert (also bis auf Standard Controls keine Chance, und selbst die sind noch nicht vollständig), Carbon und QT funktionieren eigentlich ganz gut (da GTK X11 benötigt ignoriere ich das einfach mal). Das Problem ist du hast recht exotische Komponenten dir ausgesucht. Das TIpHTML Panel nicht vollständig funktioniert ist fast zu erwarten. Es gibt sehr wenige Mac Entwickler unter den Lazarus Entwicklern, und daher tiergehendes testen gibt es kaum. Ich bin sogar überrascht das bis auf das Drucken es anscheinend funktioniert. Dein Problem mit TDateTimePicker unter Cocoa ist klar, da funktioniert der Fokus noch nicht richtig. Unter Carbon hätte ich eigentlich gedacht das es funktioniert, allerdings hat Carbon auch ein paar Fokus Probleme. Alles was mehrere Fenster verwendet macht Probleme (TSynEdit SynCompletion zum Beispiel ist unter OSX richtig lustig, da kann man nicht mehr tippen wenn es offen war außer man hat ne menge getrickst, ist aber eventuell auch schon gefixt).

Das Problem ist nunmal die LCL orientiert sich an der VCL von Delphi, welche sich sehr stark an der Windows API orientiert hat. Apple verwendet Cocoa oder Carbon. Wenn du mal mit Objective C gearbeitet hast wirst du wahrscheinlich schon wissen das Cocoa und die WinAPI verschiedener nicht sein könnten.
Nehmen wir mal das Beispiel einer Listbox. Die WinAPI verlangt das wenn man items ändern will eine Message mit der Änderung gesendet wird (z.B: SendMessage(ListBoxHandle, LB_ADDSTRING, 0, SomeText); ). Bei Cocoa übergibt man eine Delegate klasse (das ist eine klasse die das entsprechende Delegate Interface erbt) mit 2 Funktionen, numberOfRows(in:) und tableView(_:objectValueFor:row:). numberOfRows wird dann vom TableView aufgerufen um rauszufinden wie viele elemente es gibt. tableView(_:objectValueFor:row:) wird dann für jede Row aufgerufen und muss dann den Inhalt übergeben.
Das Cocoa System macht irgendwo sinn (die Daten werden nicht zwei mal gespeichert wie bei Windows), allerdings sind Cocoa Anwendungen damit eher passiv und event gesteuert während WinAPI Anwendungen normalerweise aktiv und imperativ ablaufen.

Das macht das entwickeln einer Cross Library natürlich deutlich aufwendiger. Gepaart mit der Tatsache das es recht wenige OSX Entwickler in der Lazarus Community gibt ist natürlich klar das man ein paar abstriche bei der LCL machen muss.

Ich arbeite aktuell so, ich verwende fast ausschließlich Standard Komponenten, und alles was darüber hinaus geht und OSX braucht, bastel ich mir selbst Komponenten zusammen (Entweder komplett selbst zeichnen via Canvas, oder aus Standard Komponenten zusammengesetzt). Wobei unter OSX programmiere ich meist eh nur TextMode Anwendungen, da hat man den ganzen stress nicht.

Die LCL ist toll um Anwendungen rüber zu Porten, und die ungefähr ähnlich laufen sollen. Wenn du allerdings wirklich für OSX entwickeln willst nimm lieber Swift. Die Sprache ist echt nett, und bekommt man problemlos in 1-2 Wochen grundlegend gelernt.

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Lazarus(LCL) auf MacOS?

Beitrag von LazProgger »

Nunja, das schöne wäre ja, getreu dem Motto "einmal schreiben, überall kompilieren", eben nicht alles in Swift noch einmal neu machen zu müssen...

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Lazarus(LCL) auf MacOS?

Beitrag von mischi »

Warf hat geschrieben:...(da GTK X11 benötigt ignoriere ich das einfach mal)...

Da kann ich doch gleich noch einmal die Fink-Pakete in den Ring werfen. Wenn es eben gar nichts anderes geht und alle Stricke reißen, weil die gtk-lcl die einzige ist, die die benötigten Komponenten implementiert hat und auch das bescheidene Aussehen von X11 egal ist, dann kann man mit fink die gtk2-lcl oder auch lazarus-gtk2 installieren. Fink sorgt dafür, dass auch alle libraries vorhanden sind, die benötigt werden. Man kann damit auch ein standalone Doppelklick-Programm machen. Entweder von Hand oder mit einem Skript.
MiSchi macht die fink-Pakete

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Lazarus(LCL) auf MacOS?

Beitrag von marcov »

Warf hat geschrieben:Das Problem ist nunmal die LCL orientiert sich an der VCL von Delphi, welche sich sehr stark an der Windows API orientiert hat. Apple verwendet Cocoa oder Carbon. Wenn du mal mit Objective C gearbeitet hast wirst du wahrscheinlich schon wissen das Cocoa und die WinAPI verschiedener nicht sein könnten.


Gilt auch für zb GTK.

Das macht das entwickeln einer Cross Library natürlich deutlich aufwendiger. Gepaart mit der Tatsache das es recht wenige OSX Entwickler in der Lazarus Community gibt ist natürlich klar das man ein paar abstriche bei der LCL machen muss.


Das ist ein besseres Argument, es gibt weniger Leute die an LCL auf OS X arbeiten, und die paar OS X Developer die etwas machen können spendieren ihre Zeit lieber an OS X spezifische Lösungen. Aber das ist eine Wahl.

Und ja, OS X ist schwierig, speziell Cocoa, aber auch die konstante Änderungen, wie ->intel, ->64-bit, ->Cocoa, -> LLVM, ->objc v2 usw, und das sind nur die Größeren.

Die LCL ist toll um Anwendungen rüber zu Porten, und die ungefähr ähnlich laufen sollen. Wenn du allerdings wirklich für OSX entwickeln willst nimm lieber Swift. Die Sprache ist echt nett, und bekommt man problemlos in 1-2 Wochen grundlegend gelernt.


Das ist immer einfacher. Es ist auch einfacher um Delphi zu kaufen, Visual studio zu nutzen usw, als Lazarus (auch auf WIndows) zu entwickeln. Aber dann hat man eben so viel Projekte und Sprachen als Targets, und muss man immer mit als der Präferenz des Vendors sich ändert.
Zuletzt geändert von marcov am Do 8. Feb 2018, 14:55, insgesamt 3-mal geändert.

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Lazarus(LCL) auf MacOS?

Beitrag von Soner »

TDateTimePicker ist doch kein exotische Komponente. Lazarus wird hauptsächlich für Datenbankprogramme benutzt. Und TDateTimePicker benutzt man für fast alle Datenbankanwendungen.
Ich habe bisschen getestet es scheint so als ob QT-Widgetset enigermaßen gut funktioniert, einige Fehler muss ich wahrscheinlich noch korregieren, als ich letztes Jahr angefangen habe Lazarus richtig zu verwenden, musste ich das auch Lazarus unter Windows machen .
Den Fehler dass TDateTimePicker beim QT-Widgetset Sonntage als erste Tag anzeigt habe ich gestern korregiert.
Ich habe Crossplatform-Browser-Komponente(IE,QT-Webview, IpHtml als ausweich Komponente) erstellt mit Druckfunktionen usw.. Cocoa-Webkit fehlt noch. Ich konnte nicht herausfinden wie man ein Cocoa-Fenster in ein LCL-Fenster plaziert. Ich habe im englisch Forum nachgefagt, dort weiß auch keiner.

Auf ObjectiveC und Swift habe ich kein Lust, ich finde Lazarus und Freepascal ganz gut.

Antworten