Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TControlList.OnItemClick Problemstellung (https://www.delphipraxis.net/214986-tcontrollist-onitemclick-problemstellung.html)

TurboMagic 17. Apr 2024 18:57

TControlList.OnItemClick Problemstellung
 
Hallo,

ich habe eine Form mit einer TControlList drauf und OnItemClick definiert.
Außerdem hab' ich gleich mal das erste selektiert, damit Tastaturnutzer gleich
mit den Pfeiltasten darin navigieren können.

Nur: für die armen Mausbenutzer bedeutet das, dass ein Klick auf den ersten
Listeneintrag ignoriert wird, da im Code zur Mausbehandlung des Steuerelements
leider geprüft wird ob sich das selektierte Element geändert hat, was es ja nicht
hat.

Hat jemand eine Idee wie ich beide Fraktionen zufrieden stellen kann?

Grüße
TurboMagic

anse 17. Apr 2024 20:38

AW: TControlList.OnItemClick Problemstellung
 
Wenn du den ersten schon vorselektierst, würde ich auch den entsprechenden Code ausführen der bei Klick/Änderung ausgeführt werden würde.

TurboMagic 17. Apr 2024 21:09

AW: TControlList.OnItemClick Problemstellung
 
Danke für die Idee, nur verstehe ich die noch nicht ganz. Soll ich das OnItemClick aufrufen aber ohne meinen Handler Inhalt auszuführen?
Oder etwa mit meinem Handler Inhalt? Letzteres wäre für meine Anwendung jedoch unpassend...

Grüße
TurboMagic

Uwe Raabe 17. Apr 2024 23:12

AW: TControlList.OnItemClick Problemstellung
 
Ich vermute, das Problem entsteht auch, wenn der User mit den Tasten navigiert und den dann ausgewählten Eintrag mit der Maus anklickt?

anse 18. Apr 2024 08:54

AW: TControlList.OnItemClick Problemstellung
 
Zitat:

Zitat von TurboMagic (Beitrag 1535857)
Soll ich das OnItemClick aufrufen aber ohne meinen Handler Inhalt auszuführen?
Oder etwa mit meinem Handler Inhalt?

Auch den Click-Handler ausführen. In der Annahme dass das gleiche passiert wenn man mit der Tastatur navigiert.

TurboMagic 18. Apr 2024 17:14

AW: TControlList.OnItemClick Problemstellung
 
Hallo,

ich prüfe mal noch Uwe's Vermuting. Aber der Tipp gleich den Handler auszuführen ist
definitiv nicht was ich will.

Die Aktion hinter dem selektierten Eintrag soll ja entweder beim Draufklicken oder
wenn jemand Enter drückt ausgeführt werden.

Grüße
TurboMagic

TurboMagic 19. Apr 2024 10:00

AW: TControlList.OnItemClick Problemstellung
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1535860)
Ich vermute, das Problem entsteht auch, wenn der User mit den Tasten navigiert und den dann ausgewählten Eintrag mit der Maus anklickt?

Habe das eben geprüft und ja: du hast Recht!
Nur was hilft mir das? Hm...
Wenn ich da in den Vergleich eingreifen könnte?

Andere Idee: man verschiebe den Eventhandlerinhalt in ein OnTimer Event und hänge sich auch noch in das OnClick
Ereignis rein. Dort und im OnItemClick startet man den Timer und wenn nach Ablauf des Timers nicht beide
Events ausgelöst worden sind, sondern nur OnClick, dann weiß man, dass der Benutzer das gerade schon selektierte
Element angeklickt hat. Dann könnte man den Eventhandlerinhalt mit der Info aufrufen.

Grüße
TurboMagic

TurboMagic 19. Apr 2024 10:10

AW: TControlList.OnItemClick Problemstellung
 
Ach, warum einfach, wenn's auch komplizuert geht? ;-)

Der betreffende Dialog dient ja nur zur Selektion einer auszuführenden Aktion.
Wird eine angeklickt oder per Tastatur gewählt und mit Enter bestätigt,
wird der Dialog mittels ModalResult := mrOK geschlossen.
Der Aufrufer des Dialogs ruft dann eine Getter Methode auf, die ermittelt welcher
Eintrag selektiert wurde. Da sind jetzt auch nicht hunderte zu erwarten, daher
kann man das mit einer Schleife noch zeitlich brauchbar tun.

Die Lösung ist damit, für die Mausverarbeitung nicht das OnItemClick Event sondern
einfach das OnClick Event zu benutzen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz