Wieso funktioniert der Code in Lazarus nicht?

1 Antwort

Die FormKeyDown-Prozedur ist ein Handler für die Tastaturereignisse auf der Form. Du brauchst allerdings eine Funktion zum Abfangen deines systemweiten Hotkeys.

{ declaration }
private
  procedure WMHotKey(var Msg: TMessage); message WM_HOTKEY;

{ implementation }
procedure TForm1.WMHotKey(var Msg: TMessage);
begin
  { ... }
end;

Wenn du mehrere Hotkeys registrierst, könntest du sie anhand der registrierten ID unterscheiden. In Msg.wParam steht die ID, die getriggert wurde.

if Msg.wParam = YourID then
begin
  { do something ... }
end;

Es wäre im Übrigen besser, wenn du dir eindeutige IDs vom System generieren lassen würdest, statt selbst IDs zu setzen, die womöglich bereits von anderen Programmen in Benutzung sind.

{ field declaration }
private
  MyHotKeyID: Integer;

{ in FormCreate }
MyHotKeyID := GlobalAddAtom('MyHotKey');
RegisterHotKey(Handle, MyHotKeyID, MOD_CONTROL or MOD_SHIFT, VK_NUMPAD1);

Dein Feld HotkeyRegistered müsste zudem auf True gesetzt werden, sodass der Hotkey bei Programmbeendigung wieder entfernt wird. An sich könntest du aber auch komplett auf dieses Feld mitsamt Abfrage verzichten und einfach nur die UnRegisterHotKey-Funktion aufrufen.