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/)
-   -   Delphi TControlList (https://www.delphipraxis.net/214932-tcontrollist.html)

TurboMagic 6. Apr 2024 23:48

TControlList
 
Hallo,

ich will einen Dialog zur Auswahl einer Art Aktion bauen (also was als nächstes zu tun ist).
Dafür hab' ich die VCL ControlList ausprobiert. Im Gurnde sieht das nett aus, hat aber noch
Probleme beim Tastaturhandling.

Der Dialog wird modal mittels ShowModal aufgerufen und das OnClick Event der ControlList
setzt ModalResult auf mrOK, was das Fenster schließt. Nur wenn ich das per Tastatur bedienen
will schliet sich das Fenster, sobald ich eine der Pfeiltasten drücke.

Eigentlich möchte ich mit den Pfeiltasten einen Eintrag selektieren und mit Enter dann
"quittieren" und damit das Fenster schließen.

Gibt's da irgen eine Lösung dafür?

Grüße
TurboMagic

jaenicke 7. Apr 2024 09:40

AW: TControlList
 
Ich würde dir raten, dafür OnItemDblClick zu verwenden. Dann bekommst du keine Konflikte.

Ansonsten kannst du im OnKeyDown das OnClick deaktivieren und im OnKeyUp wieder aktivieren. Das Problem ist aber, dass OnClick immer ausgelöst wird, auch wenn gar kein Eintrag angeklickt wurde. Wenn also per Tastatur (oder voreingestellt) ein Eintrag ausgewählt wurde, wird der Dialog bei einem Klick außerhalb der Items dennoch geschlossen. OnItemClick wiederum wird nur ausgelöst, wenn sich der Eintrag ändert.

Leider wurden mit dieser Komponente wieder Inkonsistenzen hinzugefügt:
OnItemClick löst nur bei einem Wechsel des Eintrags aus. OnItemDblClick löst auch bei einem Doppelklick auf den schon ausgewählten Eintrag aus. Warum kann man das nicht bei neuen Komponenten sauber lösen? Man könnte z.B. nur ein OnMouseClick anbieten, das nur auf die Maus reagiert, um die Logik von den alten OnClick Ereignissen abzugrenzen. Aber zumindest sollte die Logik bei zwei neuen Klickereignissen sich nicht unterscheiden...

TurboMagic 7. Apr 2024 15:45

AW: TControlList
 
Hallo,

dabke für die Tipps. Werde mir das nacher mal anschauen.
Eine nicht ganz so schöne Alteriative ist mir zwischenzeitlich gekommen:

in der Liste selektiert man nur die Option und der Dialog wird erst durch Betätigen
eine "Weiter" oder "OK" Buttons geschlossen...

Ist halt für die Mausschubser etwas unkomfortabler...

Grüße
TurboMagic

TurboMagic 7. Apr 2024 16:19

AW: TControlList
 
Zitat:

Zitat von jaenicke (Beitrag 1535446)
Ich würde dir raten, dafür OnItemDblClick zu verwenden. Dann bekommst du keine Konflikte.

Ansonsten kannst du im OnKeyDown das OnClick deaktivieren und im OnKeyUp wieder aktivieren. Das Problem ist aber, dass OnClick immer ausgelöst wird, auch wenn gar kein Eintrag angeklickt wurde. Wenn also per Tastatur (oder voreingestellt) ein Eintrag ausgewählt wurde, wird der Dialog bei einem Klick außerhalb der Items dennoch geschlossen. OnItemClick wiederum wird nur ausgelöst, wenn sich der Eintrag ändert.

Grr! Der erste Versuch das Umzusetzen endet erst Mal in einer Fehlermeldung des Formdesigners.
Hatte auf das Event Doppelgeklickt um wie üblich den leeren handler anzulegen und jetzt sagt die
IDE sie kann den nicht finden. Duh! Die IDE hätte den doch erst anlegen sollen... ;-)

Naja, gibt's halt den nächsten Bugreport...

Ah, inzwischen gesehen, dass die IDE es wirklich versuchte, es aber an falscher telle mitten in einen anderen Handler reinpappen wollte...

Grüße
TurboMagic


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

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