2012-04-14 3 views
0

Ich habe eine Combobox mit Elementen - Hotkeys. Ich möchte jede mit einem Win32-Hotkey verbinden, z.B. F2 bis VK_F2 und dann dieses mit RegisterHotkey aufrufen. Was ist der beste Weg, dies zu tun? Ich habe Sachen nachgeschaut und vielleicht hexadezimale Werte könnten helfen, aber es sagt nicht, wie man sie benutzt. Vielen Dank.Wie kann ein Element aus einer Combobox mit einem Win32-API-Hotkey verknüpft werden?

Es tut mir leid ich nicht mehr Informationen zur Verfügung stellen könnte, aber ich weiß nicht, was sollte ich sonst noch enthalten:/

Antwort

1

Sie TextToShortCut verwenden können, und dann entschlüsseln die zurück TShortCut in die erforderlichen Werte für RegisterHotKey:

var 
    Shortcut: TShortCut; 
    Flags: Cardinal; 
    Key : Word; 
    Shift : TShiftState; 
begin 
    ShortCut := TextToShortCut(ComboBox1.Items[ComboBox1.ItemIndex]); 
    Flags := 0; 
    Key := 0; 
    Shift := []; 
    ShortCutToKey(Shortcut, Key, Shift); 
    if ssCtrl in Shift then 
    Flags := Flags or MOD_CONTROL; 
    if ssShift in Shift then 
    Flags := Flags or MOD_SHIFT; 
    if ssAlt in Shift then 
    Flags := Flags or MOD_ALT; 

    // You should check the return value of RegisterHotKey - it returns 
    // a BOOL indicating success or failure. Omitted because your 
    // question isn't about using RegisterHotKey. 
    RegisterHotKey(Application.Handle, YourHotKeyID, Flags, Key); 
end; 

TextToShortCut und ShortCutToKey definiert sind sowohl in der Menus Einheit.

YourHotKeyID ist ein Wert zwischen $ 0000- $ BFFF Sie definieren, die an Ihre App in der wParam übergeben werden, wenn Sie die WM_HOTKEY Nachricht erhalten.

Mit allem, was gesagt wird, sollten Sie Ihre Wahl der UI Kontrollen neu überdenken. Wenn Sie eine THotKey verwenden, kann der Benutzer nur die Tastenkombination drücken, die er verwenden möchte (anstatt durch eine Liste zu scrollen). Sie können dann die THotKey.HotKey anstelle des ShortCut Variable in dem Beispielcode verwenden (Sie können es direkt an ShortCutToKey passieren, und die Beseitigung den ShortCut Variable vollständig):

ShortCutToKey(HotKey1.HotKey, Key, Shift); 
// ... remainder of code 

Und im Vorgriff auf Ihre bald-zu kommen Kommentar :), wie man die WM_HOTKEY Nachricht fängt und handhabt und wie man mehrere Hotkeys behandelt, die Sie registriert haben, sollte eine neue Frage sein. Dieser war speziell über eine Combobox und einen Hotkey; Wie man mit dem zu drückenden Hotkey umgeht, ist völlig anders.

+0

Pff, ich weiß eigentlich, wie man WM_HOTKEY fängt und behandelt: P – argoneus

+0

@argoneus, Sie haben das Lächeln bemerkt, nicht wahr? :) –

+0

Ja, ich nahm es als 'Inb4 Sie fragen diese Frage: P' – argoneus

Verwandte Themen