Plattformunabhängige GUI: Best Practice, Anleitung, ...

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Ich934 »

Hallo,

bisher hab ich in der Regel Konsolenprogramme oder kleine GUIs entwickelt. Da war das alles kein Problem bzw. hat gar keine Rolle gespielt.

Jetzt kommt ein größeres Projekt auf mich zu, dass plattformunabhängig sein soll. Hier wird das dann interessant. Wie löse ich das Problem mit dem Aussehen unter den verschiedenen Systemen?

Gestalte ich eine Form unter Linux, so schaut diese hier prima aus. Unter Windows habe ich jedoch goße Abstände zwischen den Komponenten. Anders rum überschneiden sich diese. Bis zu einem gewissen Grad kann ich natürlich auch mit AutoSize arbeiten aber irgendwann wird das einfach zu kompliziert.

Zum Thema plattformunabhängiges Programmieren finde ich zwar einiges, aber nichts was sich mit Forms beschäftigt. Vielleicht hat hier jemand einen Tipp für mich.

Vielen Dank.
Tipp für PostgreSQL: www.pg-forum.de

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Timm Thaler »

Immer AutoSize, keine absolute Positionierung, Elemente per Anchor aneinanderhängen. Überlegen, welche Elemente wo dran hängen sollen, welche in der Größe variabel sein können.

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

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Warf »

Testen, Testen, Testen...

Selbst wenn du alles "richtig" machst können kleinigkeiten wie Widgetset spezifische eigenschaften, bugs, und unter Windows die Bildschirmskalierung dir alles kaputt machen.

Kleines beispiel, wenn du GTK-2 unter Linux benutzt, und versuchst dinge über Canvas zu zeichnen, gibts einen tollen bug, das aufrufe von Polygon (oder darauf aufbauenden commands) einfach von der Absoluten Fensterposition aus die Koordinaten messen.

Außerdem würde ich dir empfehlen auf Linux ein Widgetset zu benutzen, also z.b. nur QT-5 und mich gar nicht erst darum kümmern GTK oder QT-4 einzubauen und zu testen

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Ich934 »

Was bringt mir hier ein Widgetset für einen Vorteil gegenüber GTK? GTK sollte das System bei mir automatisch laden. Ich nutze Xfce, was ja GTK2 verwendet. QT-5 wäre ja dann erst mal wieder eine Abhängigkeit. Und, dumme Frage, wie binde ich das dann in Lazarus ein?

Ich hab jetzt den Designentwurf umgestellt. Das hat sogar funktioniert - wenn es auch nicht ganz so einfach war. ;-) An einer Lösung mit einem onResize kämpf ich noch. Aber da schlaf ich erst mal eine Nacht darüber...
Tipp für PostgreSQL: www.pg-forum.de

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Timm Thaler »

Anker sollten helfen. Stell mal das Design rein, dann kann man mehr dazu sagen.

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

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von wp_xyz »

Wie von den Vorrednern schon gesagt: Anker. Allerdings muss ich gestehen, dass ich mich am Anfang mit dem Anker-Editor sehr schwer getan habe, weil man nicht mehr so einfach die Controls aufs Formular klatschen und mit der Maus beliebig positionieren kann. Sondern man muss sich genau überlegen: wo hängt das Control dran, welchen Abstand soll es haben usw. Und ein vollständig verankertes Layout kann man nicht mehr mit der Maus verschieben, sondern man muss zuerst herausfinden, welche Controls wie zusammenhängen, evtl Verankerungen wieder lösen und anders neu herstellen... Nachdem ich das aber allmählich kapiert habe, möchte ich den Anker-Editor nicht mehr missen. Das ist das wichtigste Tool, um widgetset-übergreifende Layouts hinzukriegen.

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

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Warf »

Ich934 hat geschrieben:Was bringt mir hier ein Widgetset für einen Vorteil gegenüber GTK? GTK sollte das System bei mir automatisch laden. Ich nutze Xfce, was ja GTK2 verwendet. QT-5 wäre ja dann erst mal wieder eine Abhängigkeit. Und, dumme Frage, wie binde ich das dann in Lazarus ein?


Vorteil ganz einfach, GTK-2 ist schon ziemlich alt. Es kommt jetzt mit GTK 4.0 die neue major version raus (oder ist schon draußen?) und wie damals mit GTK 3 der GTK 1 support geendet hat, wird bald wahrscheinlich auch der GTK-2 support enden (bisher gibt es noch kleiner fixes für GTK 2). Vor allem wenn man sich anschaut das die GTK leute eine neue Release Schedule anstreben, sodass alle 2 Jahre eine neue Major version kommen soll (dafür sollen dann natürlich die änderungen nicht so krass sein wie von GTK2 auf 3).
Da du XFCE angesprochen hast, mit version 4.16 die wahrscheinlich anfang nächsten Jahres (oder für debian Nutzer in einem Jahr :twisted: ) rauskommt, wird dort auch der GTK-2 Support fallen gelassen (bisher wurde schon ein großteil portiert, mit 4.16 ist dann das gesammte system auf gtk3 portiert), d.h. man kann erwarten das über kurz oder lang GTK-2 sterben wird.

Das GTK-3 widgetset ist noch nicht benutzbar in Lazarus (und vielleicht wird es das auch nie sein), d.H. über kurz oder lang solltest du mal deine programme auf QT updaten. Zu deinem argument das du dann extra abbhängigkeiten brauchst, klar, für die Linux nutzer die aber KDE benutzen sieht es genau anders aus. Die haben QT-5 aber kein GTK vorinstalliert. Wer GNOME verwendet hat GTK-3 aber kein GTK-2. Auf kurz oder lang braucht man eh QT-5 oder GTK-3. Irgendeine anwendung wird es verwenden (bei mir z.b. benutz KeePassXC oder kdiff3 was QT verwendet). Und selbst wenn ich die wahl hätte, würde ich das 600MB QT dem >1GB GTK vorziehen.

Ansonsten hat so ein Widgetset system natürlich auch den Vorteil das du z.B. auf Windows die Nativen Windows-Forms verwenden kannst, die natürlich ne deutlich bessere Performance haben, und theoretisch auch unter OSX dann Cocoa, was aber auch nicht vernünftig unterstützt wird. Grade für Windows kann Lazarus damit auch sehr einfach Delphi kompatibel bleiben. Das Problem ist halt das letztenendes es mehr aufwand ist diese Widgetsets zu warten, wesshalb Lazarus einfach mindestens 8 Widgetsets unterstützt (QT 4 & 5, GTK 2 & 3, Carbon & Cocoa, Windows Forms, Custom Drawn), von denen 3 einfach noch nicht die Vollständige LCL unterstützten (cocoa, GTK-3, Custom-Drawn) für QT 4 ist der Support auch schon ausgelaufen, es gibt nur noch wenige community fixes, GTK-2 Stirbt jetzt auch langsam, carbon ist nur 32 bit und auch nur zur abwärtskompatibilität in OSX enthalten. Somit bleiben für up-to-date software entwicklung nur noch QT-5 und Windows Forms.

Wenn du vor allem das problem sehen willst benutz mal QT4 oder GTK2 oder Carbon auf OSX. QT4 und Carbon haben einfach noch den Mac OS 10.4 Stil, passen also absolut nicht ins system (optisch), während GTK-2 einen X-Server braucht (den der nutzer erst mal installieren muss), und dann sieht das ganze aus wie Windows 2000 anwendungen.
Unabhängig von den Sicherheitsbedenken, der Versionskompatibilität, etc. Ist das allein schon grund genug ein neues Framework zu benutzen! Was denkt ein Nutzer wenn er eine Anwendung sieht die offiziell 2019 entwickelt wurde, aber aussieht als käm sie aus 2000-2010? Da sucht man sich erst mal alternativen. Wenn dann wie bei GTK2 auf OSX noch dazu kommt das man sich um das ganze laufen zu lassen erst mal noch ein uralt programm (X-Server) runterladen muss, damit dieses programm überhaupt läuft, ist das programm schneller im Mülleimer gelandet als man gucken kann.
Unter Linux mag das nicht auffallen, da es da die Themes meist sowohl für QT-4 und 5 als auch GTK2 und 3 gibt, sodass alles einheitlich aussieht. Unter OSX (und auch unter windows, gibt aber keinen Grund unter Windows nicht Windows-Forms zu benutzen) sieht man es aber direkt, und es ist einfach nicht schön. Man sieht dem direkt an das es veraltete technologien verwendet.
Hierbei ist komplett irrelevant ob die noch gut oder schlecht sind, wenns nicht ins system passt, und ich eine alternative habe die optisch rein passt, werd ich bestimmt nicht das nehmen was so aussieht als würds 10 jahre alt sein.

Und dann wie gesagt noch Sicherheitsaspekte. Du solltest keine bibliotheken benutzen die keine Sicherheitsupdates mehr bekommen, vor allem bei sowas wichtigem. Stell dir nur mal vor es gäb einen Bug bei dem du mit GTK-2 eine shell poppen kannst, wenn der Style einer Komponente falsch gesetzt wird. Wenn du dann ein Mail programm schreibt, könnte dir jemand eine Mail schreiben die dann dazu führt das dein programm intern sowas wie "rm -rf ~" ausführt, und zack alle nutzerdaten weg. Das heißt du willst eigentlich immer die software benutzen die den meisten Support bekommt. QT4 ist tot. GTK2 bald auch.

Ich934
Lazarusforum e. V.
Beiträge: 316
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: Plattformunabhängige GUI: Best Practice, Anleitung, ...

Beitrag von Ich934 »

Guten Morgen,

das mit Qt5 klingt für mich einleuchtend. Ich habe dazu einen extra Thread gestartet...
Tipp für PostgreSQL: www.pg-forum.de

Antworten