Wie erkennt man eine Änderung der Modifikatortaste in einem Steuerelement, das keinen Fokus hat?
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 ...
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 lebenWie können Sie Änderungen der Modifikatortasten eines Steuerelements erkennen, das derzeit nicht fokussiert ist?