Hi,
ich möchte es nach Möglichkeit nicht im Formular machen, sondern in meiner eigenen Klasse. So sieht die momentan aus:
Delphi-Quellcode:
unit UHotKey;
interface
uses messages, Windows, classes;
const
MOD_CONTROL = 2;
type THotkeyEvent =
procedure of object;
type THotKey =
class (TComponent)
private
FOnHotKey: THotkeyEvent;
iHotkeyID: Integer;
procedure SetOnHotKey(Value: THotkeyEvent);
public
constructor create(sName, sKey :
String; AOwner : TComponent);
destructor destroy;
procedure WMHotKey(
var Msg: TWMHotKey);
message WM_HOTKEY;
published
property onHotKeyEvent: THotKeyEvent
read FOnHotKey
write SetOnHotKey;
end;
implementation
{ THotKey }
//Registriere Hotkey (nur in Verbindung STRG + Key)
constructor THotKey.create(sName, sKey:
String; AOwner : TComponent);
begin
Inherited Create(AOwner);
iHotKeyID := GlobalAddAtom(PChar(sName));
RegisterHotKey(0, iHotKeyID, MOD_CONTROL, Ord(sKey[1]));
end;
//Deregistriert den HotKey
destructor THotKey.destroy;
begin
UnRegisterHotKey(0, iHotKeyID);
Inherited Destroy;
end;
//Beim Laden wird eine Methode zum Ereignis festgelegt
procedure THotKey.SetOnHotKey(Value: THotkeyEvent);
begin
FOnHotKey := Value;
end;
//Message, die Nachricht bekommt, dass der HotKey gedrückt wurde und diese löst
//dann das Ereignis aus.
procedure THotKey.WMHotKey(
var Msg: TWMHotKey);
begin
if Msg.HotKey = iHotkeyId
then
if Assigned(FOnHotKey)
then FOnHotKey;
end;
end.
Momentan passiert halt nichts, wenn ich die entsprechende Tastenkombination drücke.
@shmia: Das wäre die Lösung, die ich nehmen würde, wenn es nur über das Formular geht.
Kann mir jemand sagen, ob das so geht, wie ich es mir vorstelle?
Ulrich