Nun ich hab mich noch ein wenig mit dem Thema befasst und bin zu folgender Lösung gekommen: Ein lokaler Thread!
Das bietet mir den Vorteil, dass sie Tastenkombi nun fürs ganze Programm gültig ist, nicht nur für ein Formular.
Delphi-Quellcode:
Var
KeyHook : HWND;
Function KeyProc(nCode : Integer;wParam : WPARAM;lParam : LPARAM) : LRESULT; Stdcall;
Begin
Result:=CallNextHookEx(KeyHook, nCode, wParam, lParam);
If (nCode >= HC_ACTION) And (wParam = VK_CANCEL) Then
Begin
UnHookWindowsHookEx(KeyHook);
Halt;
End;
End;
Initialization
KeyHook := SetWindowsHookEx(WH_KEYBOARD, @KeyProc, 0, GetCurrentThreadId);
Finalization
if KeyHook <> 0 then
UnHookWindowsHookEx(KeyHook);
End.
Das Problem mit der Schleife allerdings bleibt. Der lokale Thread scheint während der Schleife nicht aufgerufen zu werden, obwohl das eigentlich meinem Verständnis von Threads widerspricht??? Einen globalen Thread möchte ich hier nicht unbedingt verwenden. Also bleibt mir nur die Möglichkeit mit Application.ProcessMessages in den Whileschleifen.
Aber evtl. weiß ja noch jemand eine andere Lösung...