1. Computing & Technology

Discuss in my forum

How to Detect the Start Move/Resize, Move and Stop Move/Resize events of a Form

By , About.com Guide

If you want to detect when a user starts resizing and moving a Delphi form, and when the move (or resize) operation is finished, you need to handle a few Windows messages. The WM_ENTERSIZEMOVE message is sent once to a window when it enters the moving or sizing mode. The WM_EXITSIZEMOVE message is sent once to a window after it has exited the moving or sizing mode. While a form is being moved, the WM_MOVE message is sent to a window.

Here's an example (move this form and watch its title):

~~~~~~~~~~~~~~~~~~~~~~~~~
type
   TForm1 = class(TForm)
   private
     procedure WMEnterSizeMove(var Message: TMessage) ; message WM_ENTERSIZEMOVE;
     procedure WMMove(var Message: TMessage) ; message WM_MOVE;
     procedure WMExitSizeMove(var Message: TMessage) ; message WM_EXITSIZEMOVE;

...

procedure TForm1.WMEnterSizeMove(var Message: TMessage) ;
begin
   Caption := 'Move / resize started';
end; (*WMEnterSizeMove*)

procedure TForm1.WMMove(var Message: TMessage) ;
begin
   Caption := Format('Form is being moved. Client area x: %d, y:%d', [TWMMove(Message).XPos,TWMMove(Message).YPos]) ;
end; (*WMMove*)

procedure TForm1.WMExitSizeMove(var Message: TMessage) ;
begin
   ShowMessage('Move / resize complete!') ;
end; (*WMExitSizeMove*)
~~~~~~~~~~~~~~~~~~~~~~~~~

More Form related tips and article.

Delphi tips navigator:
» Delphi IDE (Code Editor) Keyboard Shortcuts
« How to Convert a Bitmap to a Cursor using Delphi code

©2012 About.com. All rights reserved.

A part of The New York Times Company.