Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Antworten
sheesh
Beiträge: 4
Registriert: Fr 11. Mär 2022, 23:29

Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von sheesh »

Hallo zusammen,

ich bin neu in Lazarus und Pascal, aber nicht neu im Programmieren.

Unter Windows kann ich ohne Probleme die Farben von TEdit, TButton usw. ändern. Sei es über den Object Inspektor oder im Code mittels object.color := clRed;

Unter Linux funktioniert das nur mit TForm aber nicht mit Elementen die auf der TForm platziert werden. Ich kann zwar bei TEdit, TButton usw. unter Linux eine Farbe im Object Inspector auswählen oder im Code eine Farbe zuweisen. Das kompiliert auch alles ohne Probleme. Aber die Farbe bleibt einfach bei default.

Ist das ein Bug oder stelle ich mich einfach blöd an? :mrgreen:

PS.: Ich habe Lazarus 2.2.0 installiert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von theo »

Komisch, ich dachte das geht unter Windows nicht, so zeigt es auch "Ansicht" -> "Browser für bedingte Eigenschaften".

Bei mir auf OpenSUSE Leap 15.3 geht das mit GTK2 (Lazarus 2.3.0 FPC 3.2.2 x86_64-linux-gtk2)
Wenn es bei dir auf GTK2 nicht geht, dann liegt es vielleicht eher am BS oder Theme, als an der Lazarus Version.

Ich lasse die Farben der Controls immer wie vom Theme vorgegeben, das sieht sonst hässlich aus.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von af0815 »

Ich kenne es auch, das zB Buttons unter Windows nicht umgefärbt werden können, was unter Linux geht. Man muss nur aufpassen, es gibt da eine Eigenschaft - bin nicht am PC - die Parentcolor oder so ähnlich heisst. Ist die aktiv, so wird die Farbe scheinbar nicht angenommen.
Edit: Falsch gemerkt, das ist korrekt, aber nur für Font und da heißt es ParentFont. Warum es bei manchen visuellen Komponenten geht und bei manchen nicht, ist vom verwendeten Widgetset und dort unter Umständen auch noch vom verwendete Thema abhängig. Die Diskussion wird öfters geführt, auch im Zusammenhang mit dem Dark Theme für Lazarus.
Windows: geht bei Win10/64 nicht, Linux: gtk2 unter arm-Linux (RasPi) und x64-Linux (Debian basierend mit XFCE) geht es. Ubuntu hatte ich schon mal Probleme.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von theo »

@af0815:
Genau! Deshalb lässt man am besten die Finger davon.
Wenn es partout sein muss, könnte man plattformübergreifend "customdrawn" verwenden.
https://wiki.lazarus.freepascal.org/Laz ... n_Controls

sheesh
Beiträge: 4
Registriert: Fr 11. Mär 2022, 23:29

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von sheesh »

Hallo zusammen,

danke für eure Rückmeldungen. Ich beschreibe mal was ich eigentlich bezwecke und vielleicht wisst ihr eine bessere Lösung dafür?

Ich möchte Lazarus zunächst dafür einsetzen, ein Cross-Plattform Werkzeug zu haben, mit dem ich effizient "Excel-Datenbanken" in vernünftige Datenbanklösungen umsetzen kann. Mir gehts hier um Linux und Windows.

Nun mein einfaches Beispiel zum üben für mich und Erklären meines Problemes.

Es soll eine Key-Value Datenbank genutzt werden mit folgender Beziehung: Autokennzeichen <-> Name

Es gibt auf dem Form Element zwei TEdit Elemente. Eines für das Kennzeichen und eines für den Namen.

Unter den TEdit Elementen hat der User die Wahl zwischen Eingabe und Ausgabe umzuschalten. Entweder bei TRadioButton, TPageControl oder einer anderen Methode.

Hier ein Screenshot, wie ich es meine. Klickt der User auf das Ausgabe-Tab wird TEdit Name auf ReadOnly gesetzt und soll sich farblich verändern, um zu signalisieren, dass jetzt hier nichts mehr eingetragen werden kann.
Wenn der User nun bei Ausgabe das Kennzeichen eingibt und auf Ausgabe klickt, wird in TEdit Name dann der dazugehörige Name angezeigt. D.h. die farbliche/design Veränderung beim setzen auf ReadOnly soll so sein, dass man den Inhalt noch gut lesen kann.
Lazarus_Beispiel.png
Lazarus_Beispiel.png (11.55 KiB) 5088 mal betrachtet

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von Winni »

Hi!

Workarounds:

Was bei allen Widgetsets geht, ist die Farbe der Form zu ändern. So könntest Du den Status z.B. durch Ampel-Farben mitteilen.

Und als Ersatz für TButton kann man den Speedbutton nehmen und durch die Verwendung verschiedener Glyphs ( = TBitmap) verchiedene Zustände signamisieren.

Winni

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

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von wp_xyz »

sheesh hat geschrieben:
Sa 12. Mär 2022, 10:27
Klickt der User auf das Ausgabe-Tab wird TEdit Name auf ReadOnly gesetzt und soll sich farblich verändern, um zu signalisieren, dass jetzt hier nichts mehr eingetragen werden kann.
Nimm statt ReadOnly = true die Eigenschaft Enabled = false, damit wird das Control eingegraut. Das ist auch system-konform. Programme, bei denen der Programmierer meint, mir seinen Farbgeschmack aufzwingen zu müssen, haben auf meiner Festplatte üblicherweise eine kurze Lebensdauer.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von theo »

+1 für Edit1.Enabled:=false;

Das ist der vorgesehene Weg.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von af0815 »

Wenn ich soetwas plattformübergreifend mache, so lege ich hinter den Button ein Image, das größer als der Button ist. Das kann ich einfärben wie ich will und das geht auf allen Plattformen. Damit ist es egal wo das Programm läuft. Enable/Disable von Buttons synchron mit Menüpunkten, geht automatisch wenn man sowieso mit Actions arbeitet und die aktiviert bzw. deaktiviert. Damit ist es auch egal wie oft man eine Action an ein Element bindet. Alles reagiert synchron.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

sheesh
Beiträge: 4
Registriert: Fr 11. Mär 2022, 23:29

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von sheesh »

Winni hat geschrieben:
Sa 12. Mär 2022, 10:36
Was bei allen Widgetsets geht, ist die Farbe der Form zu ändern. So könntest Du den Status z.B. durch Ampel-Farben mitteilen.
Wäre eine Idee, mir geht es aber um einzelne Elemente auf der Form, da ist mir dieser Ansatz zu global.
Winni hat geschrieben:
Sa 12. Mär 2022, 10:36
nd als Ersatz für TButton kann man den Speedbutton nehmen und durch die Verwendung verschiedener Glyphs ( = TBitmap) verchiedene Zustände signamisieren.
Toller Tipp, danke! :wink:
wp_xyz hat geschrieben:
Sa 12. Mär 2022, 10:59
Nimm statt ReadOnly = true die Eigenschaft Enabled = false, damit wird das Control eingegraut. Das ist auch system-konform. Programme, bei denen der Programmierer meint, mir seinen Farbgeschmack aufzwingen zu müssen, haben auf meiner Festplatte üblicherweise eine kurze Lebensdauer.
theo hat geschrieben:
Sa 12. Mär 2022, 11:06
+1 für Edit1.Enabled:=false;

Das ist der vorgesehene Weg.
Nein, eben nicht. TEdit wird ja schließlich noch genutzt, um Informationen anzeigen zu können. Wenn die ausgegraut sind, führt das zu Missverständnissen etc. Außerdem ist es schlecht zu lesen, was in einem anderen Kontext Sinn macht, aber hier nicht. Mein Ansatz bricht zum Teil sicherlich sowohl auf Linux als auch Windows die System-Konformität. Aber meine kommenden Lazarus-Programme werden auch nicht für die breite Masse sein, sondern in speziellen Szenarien zum Einsatz kommen, wo andere Kriterien wichtiger sind. Würde ich Programme für die breite Masse entwickeln, wäre mein Ansatz ein ganz anderer und System-Konformität eine wichtige Priorität.
af0815 hat geschrieben:
Sa 12. Mär 2022, 11:53
Wenn ich soetwas plattformübergreifend mache, so lege ich hinter den Button ein Image, das größer als der Button ist. Das kann ich einfärben wie ich will und das geht auf allen Plattformen. Damit ist es egal wo das Programm läuft. Enable/Disable von Buttons synchron mit Menüpunkten, geht automatisch wenn man sowieso mit Actions arbeitet und die aktiviert bzw. deaktiviert. Damit ist es auch egal wie oft man eine Action an ein Element bindet. Alles reagiert synchron.
Klasse Idee und Ansatz! So werde ich es umsetzen. Danke für diesen super Tipp! :D

wennerer
Beiträge: 519
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von wennerer »

Hallo,
das sich ein TButton nicht einfärben lässt (egal ob in Winows oder Linux) wurde ja schon öfter diskutiert. In dem konreten Beispiel von sheesh geht es ihm aber ja scheinbar (zuerst mal nur) um ein TEdit.
Hier ein Screenshot, wie ich es meine. Klickt der User auf das Ausgabe-Tab wird TEdit Name auf ReadOnly gesetzt und soll sich farblich verändern, um zu signalisieren, dass jetzt hier nichts mehr eingetragen werden kann.
Wenn der User nun bei Ausgabe das Kennzeichen eingibt und auf Ausgabe klickt, wird in TEdit Name dann der dazugehörige Name angezeigt. D.h. die farbliche/design Veränderung beim setzen auf ReadOnly soll so sein, dass man den Inhalt noch gut lesen kann.
Meiner Meinung nach lässt sich die Farbe eines TEdit unter Linux (und auch unter Winows) verändern. Sowohl mit gtk2 als auch mit qt.

Viele Grüße
Bernd
Farbe_TEdit.png
Farbe_TEdit.png (7.34 KiB) 4965 mal betrachtet
Dateianhänge
project1.zip
(106.32 KiB) 106-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von af0815 »

Nochmals, wenn es vom Widgetset und dem Theme vorgesehen ist, dann geht es.

Problematisch ist, das man zum Beispiel gerade unter Linux recht unterschiedlich zugehen kann. Unter Windows kann Aero man an sein, mal nicht. Ein Nutzer verwendet ein Dark System, wobei dort nicht einmal die ganze API durchgängig ist/war.

Was immer bleibt, das man das Userinterface auf allen zu erwartenden Plattformen testen muss und es trotzdem Überraschungen gibt.

Was immer ein gewisses Problem bleibt, wenn man von den default Farben abweicht, das der Benutzer ein Farbschema verwendet, das mit den Annahmen nicht zusammen stimmt. Es gibt öfters Benutzer die aufgrund von Einschränkungen ein anderes Schema als default verwenden müssen. Zum Beispiel bei eingeschränkten Sehvermögen oder Rot/Grün Blindheit. Wenn dann das Schema nicht zu deinen fix kodierten Annahmen passt ist die Kacke fertig. Passiert auch einfach wenn du als Fontfarbe fix schwarz verwendest und der Nutzer will ein Dark System. Dann kannst du auf dunklen Hintergrund die Schrift nicht lesen. :mrgreen:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

sheesh
Beiträge: 4
Registriert: Fr 11. Mär 2022, 23:29

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von sheesh »

wennerer hat geschrieben:
So 13. Mär 2022, 07:15
Meiner Meinung nach lässt sich die Farbe eines TEdit unter Linux (und auch unter Winows) verändern. Sowohl mit gtk2 als auch mit qt
Der Vollständigkeit halber, für die Dokumentation: Mit Gnome 41.3 auf Arch Linux gehts nicht. Gnome ist sowieso sehr restriktiv.
af0815 hat geschrieben:
So 13. Mär 2022, 08:27
Was immer bleibt, das man das Userinterface auf allen zu erwartenden Plattformen testen muss und es trotzdem Überraschungen gibt.
Was gerade unter Linux eigentlich fast unmöglich ist. Deswegen bin ich dankbar für Tipps von Lazarus Nutzern, die Erfahrungen im Crossplattform Bereich haben und wissen was i.d.R. überall funktioniert. Mein Ziel ist es, meine Lazarus Programme so Plattform-agnostisch wie möglich zu entwickeln.

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

Re: Bei Elementen wie TEdit, TButton usw. unter Linux keine Farbe möglich

Beitrag von hum4n0id3 »

sheesh hat geschrieben:
So 13. Mär 2022, 17:31
Mein Ziel ist es, meine Lazarus Programme so Plattform-agnostisch wie möglich zu entwickeln.
Vergebene Liebesmüh... So habe ich früher auch gedacht und im besten Fall schafft es in Punkto Design nur der Webbrowser. Im besten Fall was man machen kann, ist wohl sicher zu stellen das man Werkzeuge einsetzt die nicht nur für ein Betriebssystem zu Verfügung stehen, wo man nach Bedarf die Software auf ein entsprechendes System einfach portieren kann.

Also statt Visual Studio oder XCode, lieber Lazarus, Java oder Qt. Meist entwickelt man bei fremden Leuten für Windows, selbst Web-Anwendungen. Da muss man sich nicht mit Macos oder Linux Ports extra rum schlagen. Aber im Falle eines Falles kann dann entsprechend leichter reagieren, falls jemand mal zb. mit Linux kommt. Dann hat man mit Lazarus entsprechend vorgesorgt und kann sich auf den Port voll und ganz konzentrieren. Im Fall von XCode oder VS müsste man alles neu schreiben.

Antworten