3.1.4 Keyboard Shortcuts / Tastaturkürzel

Keyboard Shortcuts sind Tastenkürzel, die auch dann wirken, wenn das entsprechende Menü nicht offen ist. Typische Fälle sind 'Strg-C' für Kopieren und 'Strg-P' für Drucken. Um einen Shortcut zu definieren müssen Sie außer dem ASCII-Code der Taste auch die 'Modifier'-Taste (Strg, Shift oder Alt) angeben, die gedrückt sein soll. Der ASCII-Code kann auch ein 'erweiterter' ASCII-Code sein, z.B. für die Cursortasten oder F12.

Obwohl die Instancevariable kbdShortcut für alle GenericClass Objekte definiert ist wird sie hautsächlich für Buttons benutzt. Die im Folgenden für Buttons getroffenen Aussagen sind sinngemäß auf alle andere GenericClass Objekte übertragbar. Bitte beachten Sie bei der Wahl der Tastenkombination für kbdShortcut, dass diese vom 'R-BASIC Translator' nicht geändert werden kann.

kbdShortcut

Die Instancevariable kbdShortcut enthält einen WORD-Wert, der ein Tastenkürzel beschreibt. Drückt der Nutzer die entsprechende Tastenkombination (z.B. Strg + Z) wird der Button aktiviert, genau so, als sei er direkt angeklickt worden.
Syntax UI-Code: kbdShortcut = numVal
         Lesen: <numVar> = <obj>. kbdShortcut
     Schreiben: <obj>. kbdShortcut = numVal

Die niederwertigen 8 Bit (Bit 0 bis Bit 7) enthalten den ASCII-Code der Taste bzw. den Steuercode der Steuertaste. Die Bits 8 bis 11 sind gesetzt, wenn es sich um eine Steuer- oder Funktionstaste handelt, ansonsten sind sie Null. Die vier höchstwertigen Bits (Bit 12 bis Bit 15) enthalten 'Modifier'-Tasten, die gleichzeitig gedrückt sein müssen, damit das Kürzel aktiviert wird. Dafür sind die folgenden Konstanten definiert (KSM = Keyboard Shortcut Modifier):

Konstante   Wert         hex. Bedeutung
KSM_SHIFT   4096       &h1000 Shift Taste muss gedrückt sein
KSM_CTRL   8192       &h2000 Strg Taste muss gedrückt sein
KSM_ALT 16384       &h4000 Alt Taste muss gedrückt sein
KSM_PHYSICAL 32768       &h8000 Die Taste ist gemeint, nicht das Zeichen. Das heißt im Wesentlichen, dass der Shift-Lock- und der NumLock-Status ignoriert werden.

Hinweise:

  • Den ASCII-Code der gewünschten Taste können Sie über die Funktion ASC( ) erhalten, die auch in numerischen Ausdrücken erlaubt ist.

  • Tipp für Fortgeschrittene: KSM_PHYSICAL bedeutet auch, dass der Scancode der Taste ausgewertet wird. Für den seltenen Fall, das Sie ein solches Objekt mit einem simulierten Tastaturereignis aktivieren wollen, müssen Sie die Methode KbdEventWithScancode (anstelle von KbdEvent) verwenden. Details dazu finden Sie im Handbuch Themen, Kapitel 14.3 (Simulieren von Tastaturereignissen).
Um die gewünschte Tasten-Kombination für den Shortcut zu definieren ist manchmal etwas Experimentieren erforderlich. Die folgenden Beispiele demonstrieren die typischen Fälle.

Beispiel: Ausschneiden (Ctrl-X) und Kopieren (Ctrl-C).

Die Verwendung von KSM_PYHSICAL stellt sicher, dass die Kürzel auch funktionieren, wenn die Shift-Lock Taste eingerastet ist. Beachten Sie, dass die Codes der Kleinbuchstaben angegeben werden.

Button CutButton
    Caption$ = "Ausschneiden", 0
    ActionHandler = DoCut ' ButtonAction
    kbdShortcut = KSM_CTRL + KSM_PHYSICAL + ASC("x")
End OBJECT

Button CopyButton
    Caption$ = "Kopieren" , 0
    ActionHandler = DoCopy ' ButtonAction
    kbdShortcut = KSM_CTRL + KSM_PHYSICAL + ASC("c")
End OBJECT

Beispiel: Umsch Ctrl A

Um die Umschalttaste in einen Shortcut aufzunehmen können Sie entweder den ASCII-Code eines Großbuchstaben angeben oder einen Kleinbuchstaben mit dem Flag KSM_SHIFT kombinieren. In beiden Fällen müssen sie zusätzlich das Flag KSM_PHYSICAL setzen, weil der Tastaturtreiber die Shift-Taste bereits beim Erzeugen des ASCII-Codes verarbeitet.

   kbdShortcut = KSM_CTRL + KSM_PHYSICAL + ASC("A")
   kbdShortcut = KSM_CTRL + KSM_SHIFT + KSM_PHYSICAL  + ASC("a")

Beispiel: F12

Wenn Sie eine Steuertaste oder eine F-Taste als Shortcut setzen wollen benötigen Sie den entsprechenden 'erweiterten' ASCII-Code. Diese Codes sind in der Library 'KeyCodes' definiert. Suchen Sie im Wizzard der Library unter 'GetKey: Steuertasten' den passenden Code heraus. Sie müssen aber unbedingt beachten, dass die Codes alle 8 höherwertigen Bits gesetzt haben. Deswegen müssen Sie die 4 höchstwertigen Bit mit der Operation 'code AND &hFFF' ausblenden.

In der Library 'KeyCodes' ist folgendes definiert:

    CONST KEY_F12 = &hFF8B

UI Code
Include "KeyCodes"

Button MyButton
    < ... >
    kbdShortcut = KEY_F12 AND &hFFF 
End OBJECT

Alternativ können Sie auch direkt den Code, aber ohne die höherwertigen 4 Bit, angeben: kbdShortcut = &hF8B Um Strg-F12 als Shortcut zu setzen verwenden Sie eine der folgenden Zeilen. Die Klammern sind wichtig!
    kbdShortcut = (KEY_F12 AND &hFFF) + KSM_CTRL
bzw.
    kbdShortcut = &hF8B + KSM_CTRL

Beispiel: ESC

Ein häufiger Fall ist das Verwenden der ESC-Taste für 'Abbrechen' oder 'Beenden'. Die ESC-Taste ist eine erweiterte Taste und hat den Code &hFF1B. Um die ESC-Taste einem Button als Tastenkürzel zuzuweisen verwenden Sie eine der folgenden Zeilen:

    kbdShortcut = KEY_ESC AND &hFFF
bzw.
    kbdShortcut = &hF1B

kbdSearchPath

Damit die Keyboard Shortcuts arbeiten können müssen die entsprechenden Objekte im 'Suchpfad' für Keyboard Shortcuts sein. Primaries, Menüs und Button sind per Default im Suchpfad. Aus Effizienzgründen ist das für die meisten anderen Objekte nicht der Fall. Wenn Ihre Keyboard Shortcuts nicht arbeiten müssen Sie das Objekt, sein Parent, dessen Parent usw. in den Suchpfad aufnehmen indem Sie die Instancevariable kbdSearchPath auf TRUE setzen.
Syntax UI-Code: kbdSearchPath = TRUE | FALSE
         Lesen: <numVar> = <obj>. kbdSearchPath
     Schreiben: <obj>. kbdSearchPath = TRUE | FALSE

^

Weiter...