Für den Fall, dass in Application.OnMessage schon was drinne stehen sollte, geht Dir das bei Deiner Implementierung verloren.
Damit Du unabhängiger wirst, speichere Dir doch den Inhalt von Application.OnMessage doch im Create in 'ner Variabel (fAppMessage oder so) und rufe die Routine dann in TKeyLog.AppMessage auf. Ungetestet sowas in der Art:
Delphi-Quellcode:
procedure TKeyLog.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if not fActive then begin
if Assigned(fAppMessage) then fAppMessage(Msg, Handled);
exit;
end;
// Geht beides, WM_KeyDown und WM_KEYUP
// if Msg.message = WM_KeyDown then begin
if Msg.message = WM_KEYUP then begin
Key := Msg.wParam;
Timer.Enabled := true;
end;
if Assigned(fAppMessage) then fAppMessage(Msg, Handled);
end;