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/)
-   -   Zwischen doppelten ShortCuts wählen (https://www.delphipraxis.net/163620-zwischen-doppelten-shortcuts-waehlen.html)

uligerhardt 7. Okt 2011 09:05

Zwischen doppelten ShortCuts wählen
 
Ich habe auf einer Form eine große Menge von Actions - manche direkt in der Form definiert, manche auf Frames, die dynamisch instantiiert werden, usw.usf. Dabei gibt es doppelte ShortCuts - z.B. könnte die Form eine Aktion mit Strg+S definieren und ein gerade aktiver Frame ebenso. Drückt der Benutzer jetzt Strg+S, so sucht die VCL den ShortCut in den vorhandenen Aktionen in einer fixen Reihenfolge (Erstelllungsreihenfolge?).

Ich hätte es gerne kontextsensitiv: Wenn der Frame aktiv ist, soll "seine" Aktion ausgelöst werden, anderenfalls die der Form. Meine Lösung besteht momentan darin, in den relevanten Eventhandlern alle Aktionen durchzunudeln und bei allen gerade uninteressanten Aktionen den ShortCut auf 0 zu setzen, wenn es eine Kollision gibt. Das wird aber auf Dauer ziemlich verwickelt. Kennt ihr da eine schönere Lösung - etwa die gerade relevanten ActionLists nach "vorne" zu schieben?

Union 7. Okt 2011 09:31

AW: Zwischen doppelten ShortCuts wählen
 
Benutze doch die Tag-Eigenschaft der Actionlist als eine Art Priorität und werte diese dann in Deiner bestehenden Routine aus. Außerdem gibt es da noch die Eigenschaft State die Du benutzen könntest. Ich weiß aber nicht ob schon in D2007.

uligerhardt 7. Okt 2011 11:05

AW: Zwischen doppelten ShortCuts wählen
 
Zitat:

Zitat von Union (Beitrag 1129038)
Außerdem gibt es da noch die Eigenschaft State die Du benutzen könntest. Ich weiß aber nicht ob schon in D2007.

State gibt's schon in D2007, aber leider nur für komplette ActionLists, nicht für einzelne Actions. Wenn ich bei der ActionList der nachrangig zu behandelnden Aktion State auf asSuspended stelle, wird tatsächlich die bisher verdeckte, dem Kontext angemessene Aktion aufgerufen. Leider sind alle anderen Aktionen dieser ActionList auch disabled, obwohl sie keine Kollisionen verursachen würden. :-/

Mal sehen, ob ich irgendwie die Reihenfolge der ActionLists verändern kann - TCustomForm.IsShortCut habe ich eh schon überschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 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