Wie erkennt man eine Änderung der Modifikatortaste in einem Steuerelement, das keinen Fokus hat?

Hintergrund:

Ich arbeite an einem Steuerelement, das von abgeleitet istTCustomControl Klasse, die Fokus bekommen kann und die einige innere Elemente enthält. Diese inneren Elemente werden hervorgehoben, wenn der Benutzer sie mit dem Cursor bewegt. Sie können sie auswählen, verschieben und so weiter. Nun zum Problem ...

Problem:

Ich mache verschiedene Aktionen mit dem (sagen wir) fokussierten Element, wenn der Benutzer hältSTRG, ALT oderVERSCHIEBUNG Modifikatoren. Was ich möchte, ist, den Mauszeiger zu ändern, wenn der Benutzer das Element schwebt und zum Beispiel hältSTRG Schlüssel. Ziemlich einfach, Sie überschreiben nur dieKeyDown undKeyUp Methoden und prüfen Sie, ob ihreKey Parameter ist gleichVK_CONTROL. In Code wie folgt:

procedure TMyCustomControl.KeyDown(var Key: Word; Shift: TShiftState);
begin
  inherited;
  if Key = VK_CONTROL then
    Screen.Cursor := crSizeAll;
end;

procedure TMyCustomControl.KeyUp(var Key: Word; Shift: TShiftState);
begin
  inherited;
  if Key = VK_CONTROL then
    Screen.Cursor := crDefault;
end;

Auch wenn dies nicht der beste Weg wäre, um zu überprüfen, ob dieSTRG Taste wurde gedrückt und losgelassen (z. B. wegen der vorhandenenShift Zustandsparameter), es funktioniert wie erwartet, wenn das Steuerelement den Fokus hat, der sogar erhalten kann, aber ...

Mein Ziel ist es, den Mauszeiger zu ändern, wenn der Benutzer das Steuerelement (oder genauer gesagt ein bestimmtes Element darin) bewegt und z. DasSTRG Taste, auch wenn mein Steuerelement nicht fokussiert ist. Man kann sagen, also einfach die überschreibenMouseMove Methode und fragen Sie dort nach den Modifikatorzuständen. Und es wäre der Weg, aber ...

Was ist, wenn der Benutzer mit dem Mauszeiger über meiner Steuerung bleibt und diese drückt und loslässt?STRG Schlüssel ? Das erzeugt weder eine Mausbewegung noch ein Tastendruckereignis für meine Steuerung, oder irre ich mich? Nun, meine Frage ist also ganz offensichtlich ...

Frage:

Wie kann ich Änderungen der Modifikatortasten erkennen, wenn das Steuerelement nicht fokussiert ist und der Benutzer sich nicht mit der Maus bewegt? Ich habe über diese beiden Optionen nachgedacht, aber ich hoffe, dass ich etwas verpasst habe:

Tastaturhaken - zuverlässig, aber sieht für mich ziemlich übertrieben ausregelmäßige Überprüfung der Modifikatorzustände mit einem Timer - ich konnte nicht mit einer Verzögerung leben

Wie können Sie Änderungen der Modifikatortasten eines Steuerelements erkennen, das derzeit nicht fokussiert ist?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage