Tutorial :Delphi: Detect start and end of window move



Question:

I'm using the OnIdle-event for some simple animations, and it works all right. The trouble, though, is when the user starts to move or resize the window, the OnIdle-event stops firing until the move/resize-operation is completed.

I need to detect when this happens, so that I can pause all animations. But how do I detect movement of the window?


Solution:1

I'd go with mghie comment : use a timer for the animation, and activate/deactivate it with message handlers.

In your case, you may want to add the following message handlers :

//fired when starting/ending a "move" or "size" window  procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;  procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;        procedure TForm.WMEnterSizeMove(var msg: TMessage);    begin      AnimationTimer.Enabled := false;      inherited;    end;      procedure TForm.WMExitSizeMove(var msg: TMessage);    begin      AnimationTimer.Enabled := true;      inherited;    end;  


Solution:2

I haven't tried this, but I'd say you could probably use WM_WINDOWPOSCHANGING to tell when the window is being moved. http://msdn.microsoft.com/en-us/library/ms632653(VS.85).aspx

Delphi code would be:

TSomeForm = class(TForm)  protected    ...    procedure WindowPosChanging(var Msg : TMessage); message WM_WINDOWPOSCHANGING;    ...  end;  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »