TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Rund um die LCL und andere Komponenten
Antworten
pascoli
Beiträge: 10
Registriert: So 4. Mai 2025, 21:21

TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Beitrag von pascoli »

Hallo,
Das Problem betrifft den Fall, wenn in der Listbox MultiSelect eingestellt ist und man in den leeren Bereich der Listbox unterhalb des letzten Eintrags klickt. Wenn mehrere Einträge in der ListBox markiert sind, ist das Verhalten bei Links-Klick in den leeren Bereich je nach BS und Widgetset unterschiedlich:
  • Linux gtk2/3: die Markierungen bleiben unverändert, der Select-Status in der OnClick-Procedure entspricht dem, was man sieht und der ItemIndex der ListBox bleibt unverändert
  • Linux qt5/6: die Markierungen verschwinden, alle Select-Status bleiben in der OnClick-Procedure unverändert auf True. Bei einem weiteren Click irgendwohin ist ersichtlich, dass die Status offenbar nach Ablauf der OnClick-Prozedur verändert werden. Der ItemIndex bleibt unverändert.
  • Windows: nur die vor dem Leer-Click zuletzt angeklickte Zeile bleibt markiert, alle anderen Markierungen verschwinden. In der OnClick-Prozedur entsprechen die Select-Status dem, was man sieht. Der ItemIndex ist unabhängig von jeglicher Markierung immer auf der letzten Zeile
Es gibt noch weitere Unterschiede bei Doppelklicks oder Klicks mit den beiden anderen Maustasten.
Aufgefallen ist mir noch, dass bei Doppelklick ausser der OnDblClick- auch die OnClick-Procedure ein- oder machmal auch zweimal startet. Wie soll man da zwischen Einfach- und Doppelklick unterscheiden?
Ein Beispielprogramm und die Unterschiede finden sich in den angehängten Dateien.

Ist das nur bei mir so und/oder ist das (zum Teil) Absicht?
Kann man Einfach- und Doppelklicks in den leeren Bereich irgendwie verhindern oder zumindest nicht an die ListBox weiterreichen?

Mein System:
Lazarus 4.6 / FPC 3.2.2
Win 11 Pro 25H2, Build 26200.8037 / 1000.26100.300.0
Linux : EndeavourOS, Lazarus aus Repo der Ditribution, qt5pas 1.2.16, qt6pas 6.2.10
Dateianhänge
Unterschiede-gtk-qt-win.pdf
(188.43 KiB) 6-mal heruntergeladen
ListBoxTest.zip
(2.64 KiB) 2-mal heruntergeladen

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

Re: TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Beitrag von Mathias »

Wenn mehrere Einträge in der ListBox markiert sind, ist das Verhalten bei Links-Klick in den leeren Bereich je nach BS und Widgetset unterschiedlich:
Dies ist vom jeweiligen OS / Widgetset vorgegeben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7202
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: TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Beitrag von af0815 »

Grundlegend wie Mathias es in kürze gesagt hat.

Genauer, die LCL versucht soweit wie möglich die nativen Komponenten des aktuellen Widgetsets zu verwenden. Dazu kommt noch das Lazarus stark an die Gebräuche (manchse sagen auch Unsinn) von Delphi gebunden sind. Weil die Widgetsets auf den verschiedenen Plattformen unterschiedlich sind, kann es da zu Abweichungen kommen.
Beispiel das auf manchen Plattformen ein Button eine vom System abweichende Farbe haben kann und manchmal nicht.
Auch die ganzen Tastenbelegungen sind einmal spezifisch für ein Betriebssystem, dann noch für das Widgetset und dann noch was der Programmierer zusätzlich draus macht.
Es kann auch sein, das auf manchen Plattformen gewisse Komponenten nativ nicht vorhanden sind, dann wird versucht das zu emulieren.

Alles in allen kann man nicht 100% erwarten das alles immer ganz gleich funktioniert. Aber ein Benutzer des Widgetsets fällt das oft so nicht auf, weil er gewisse Verhalten gewöhnt ist, es fällt erst auf, wenn man verschiedene Systeme kennt und deswegen mit den Unterschieden kämpft.

Auch zwischen Wayland und X11 kann durch unterschiedliche Manager ein Unterschied sein.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pascoli
Beiträge: 10
Registriert: So 4. Mai 2025, 21:21

Re: TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Beitrag von pascoli »

OK, dann ist das leider so.
Das heißt aber, dass ich qt nicht wirklich verwenden kann. Wenn ich bei einem "Leerklick" in OnClick auf den Select-Status zugreife, dann liefert mir das True, in der GUI ist die Zeile aber nicht mehr selektiert. Das dürfte zu einer nicht tolerierbaren Verwirrung führen.

Und gtk mag ich, ehrlich gesagt, überhaupt nicht.

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

Re: TListBox unterschiedliches Verhalten Win <> Linux gtk <> Linux qt

Beitrag von Mathias »

Genauer, die LCL versucht soweit wie möglich die nativen Komponenten des aktuellen Widgetsets zu verwenden.
Was man noch alternativ machen kann, man kann auf Windows auch QTx oder GTK verwenden, dann ist dies auch noch ähnlicher. Dies hat aber einen grossen Nachteil, es werden DLL für GTK oder QT benötigt.
Auch zwischen Wayland und X11 kann durch unterschiedliche Manager ein Unterschied sein.
Meinst du das habe eine Einfluss auf einzelne Widgets ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten