Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

AW: THotKey mit Space behandlung

  Alt 8. Mär 2011, 16:11
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
  Mit Zitat antworten Zitat