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.
Pff, ich weiß eigentlich, wie man WM_HOTKEY fängt und behandelt: P – argoneus
@argoneus, Sie haben das Lächeln bemerkt, nicht wahr? :) –
Ja, ich nahm es als 'Inb4 Sie fragen diese Frage: P' – argoneus