Bei meinen Versuchen kommen während des Verschiebens, also solange die linke Maustaste gedrückt ist, bei jeder 1-Pixel-Bewegung beide Messages an. Allerdings habe ich keine Info darüber, was WM_MOVING an Daten mitschickt; bei WM_MOVE kommt über den TMessage-Parameter die X- und Y-Koordinaten der Client-Area mit.
Delphi-Quellcode:
type
TForm1 = class(TForm)
.
private
procedure WMMoving(var Msg: TMessage); message WM_MOVING;
procedure WMEnterSizeMove(var Msg: TMessage) ; message WM_ENTERSIZEMOVE;
procedure WMMove(var Msg: TMessage) ; message WM_MOVE;
procedure WMExitSizeMove(var Msg: TMessage) ; message WM_EXITSIZEMOVE;
.
end;
procedure TForm1.WMMoving(var Msg: TMessage);
begin
inherited;
lbInfo.Caption :=
Format('WM_MOVING: Client-Bereich X0 = %d, Y0 = %d',
[Self.ClientOrigin.X, Self.ClientOrigin.Y]);
if CheckBox1.Checked then
ChildForm.SetBounds(Self.Left + FChildDelta.X, Self.Top + FChildDelta.Y,
ChildForm.Width, ChildForm.Height);
end;
procedure TForm1.WMEnterSizeMove(var Msg: TMessage);
begin
StatusBar.SimpleText := 'Move/Resize gestartet...';
end;
procedure TForm1.WMExitSizeMove(var Msg: TMessage);
begin
StatusBar.SimpleText := 'Move/Resize beendet!';
end;
procedure TForm1.WMMove(var Msg: TMessage);
begin
StatusBar.SimpleText :=
Format('MainForm wird verschoben: Client-Bereich X0 = %d, Y0 = %d',
[TWMMove(Msg).XPos,TWMMove(Msg).YPos]);
end;