Hallo,
die Delphi-Komponente THotKey kapselt lediglich ein von Microsoft erstelltes Windows-Control, das im
MSDN dokumentiert ist. Die dort erwähnten Nachrichten
WM_KEYDOWN und
WM_SYSKEYDOWN könnte man nun abfangen und die Beschränkungen aufheben:
Delphi-Quellcode:
type
THotkey = class (ComCtrls.THotkey)
private
procedure WMKeyDown (var aMessage: TWMKeyDown); message WM_KEYDOWN;
procedure WMSysKeyDown (var aMessage: TWMSysKeyDown); message WM_SYSKEYDOWN;
procedure SetHotkeyFromMessage (var aMessage: TWMKey);
end;
procedure THotkey.WMKeyDown (var aMessage: TWMKeyDown);
begin
if (aMessage.CharCode = VK_SPACE) then
SetHotkeyFromMessage (aMessage)
else
inherited;
end;
procedure THotkey.WMSysKeyDown (var aMessage: TWMSysKeyDown);
begin
if (aMessage.CharCode = VK_SPACE) then
SetHotkeyFromMessage (aMessage)
else
inherited;
end;
procedure THotkey.SetHotkeyFromMessage (var aMessage: TWMKey);
var
ShiftState: TShiftState;
begin
ShiftState := KeyDataToShiftState(aMessage.KeyData);
Hotkey := ShortCut(aMessage.CharCode, ShiftState);
if Assigned(OnChange) then
OnChange (Self);
aMessage.Result := 0;
end;
Dabei ist zu beachten, dass die Deklaration von THotkey
vor der Deklaration des verwendenden Formulars erfolgen muss. Falls Deklaration und Implementierung von THotkey in eine eigene
Unit ausgelagert werden, muss diese bei der Verwendung in der USES-Liste
nach "ComCtrls" aufgeführt werden.
Gruß Hawkeye