// Der folgende Code stellt fest, wann das Verschieben eines Fensters
// beendet ist. Siehe auch
das Ereignis OnMove erzeugen

// (Für neuere Versionen siehe weiter unten)

// Getestet mit D4 unter XP

... 
  public 
    { Public-Deklarationen } 
    procedure OnMoving(var aMsg: TMsg); message WM_MOVING; 
    procedure WMNCHittest(var Msg: TWMNCHittest); message WM_NCHittest; 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
var 
  xx, yy: integer; 
  moveflag: boolean = false; 
 
procedure TForm1.OnMoving(var aMsg: TMsg); 
begin 
  inherited; 
  if visible and not moveflag then 
  begin 
    moveflag := true; 
    xx := left; 
    yy := top; 
  end; 
end; 
 
procedure TForm1.WMNCHittest(var msg: TWMNCHittest); 
begin 
  if moveflag then begin 
    if (left <> xx) or (top <> yy) 
      then // machwas, z.B.: 
      showmessage('Das Fenster wurde verschoben'); 
    moveflag := false; 
  end; 
  inherited; 
end;

// ---------------------------------------------------

// Getestet mit RS 10.4 unter W11

// Auf Verschieben oder Größenänderung reagieren:

type 
  TForm1 = class(TForm) 
  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
    procedure WMEITHEROR(var Msg: TWMNoParams); message WM_EXITSIZEMOVE; 
    procedure WMSIZE(var Message: TMessage); message WM_SIZE; 
    procedure WMMOVE(var Message: TMessage); message WM_MOVE; 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
var 
  MV: Boolean; 
 
procedure TForm1.WMEITHEROR(var Msg: TWMNoParams); 
begin 
  inherited; 
  case MV of 
    True: 
      ShowMessage('Moved'); 
  else 
    ShowMessage('Sized'); 
  end; 
end; 
 
procedure TForm1.WMSIZE(var Message: TMessage); 
begin 
  inherited; 
  MV := False; 
end; 
 
procedure TForm1.WMMOVE(var Message: TMessage); 
begin 
  inherited; 
  MV := True; 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke