Noch ein bisserl kürzer:
...
Das stimmt! Ich wusste nicht, dass von Hause aus gilt
Handled:= False;
. Ich werde gleich mal den Code anpassen. Ich habe es übrigens bei mir auch mit einer Variable besser lesbar gemacht.
Allerdings ist die Lösung
doch (noch) nicht perfekt:
Wenn ich jetzt ein weiteres Fenster öffne und dort mit den Cursortasten rumhantiere, dann bewegt sich munter der jeweils auf dem Hauptform befindliche, aktive TButton. Auf dem Kindfenster passiert hingegen nichts mehr
Das ist sehr ungünstig. Daher noch ein weiteres Codeschnipsel
:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
const
STEP = 16;
var
Button: TButton;
begin
if (Screen.ActiveForm = self) and // Ist das gewünschte Fenster aktiv?
(ActiveControl is TButton) then
begin
Button := TButton(ActiveControl);
Handled := true;
case Msg.CharCode of
VK_LEFT : Button.Left := Button.Left - STEP;
VK_UP : Button.Top := Button.Top - STEP;
VK_RIGHT : Button.Left := Button.Left + STEP;
VK_DOWN : Button.Top := Button.Top + STEP;
else
Handled := False;
end;
end;
end;