Home » Tipps & Tricks » Komponenten » Allgemein » TWinControl zur Laufzeit mit der Maus skalieren/verschieben

TWinControl zur Laufzeit mit der Maus skalieren/verschieben

Von TWinControl abgeleitete Komponenten können über die Message WM_SysCommand skaliert und verschoben werden. Die Message wird mit der Methode Perform direkt an die Fensterprocedure des Controls gesendet. Die Komponente reagiert dann je nach übergebenem Parameter.ReleaseCapture kümmert sich um die Verarbeitung der Mausereignisse.

procedure TForm1.WinControlMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Sender is TWinControl) then
  begin
    ReleaseCapture; //Fängt alle Mausereignisse ab
    TWinControl(Sender).Perform(WM_SysCommand, $F012, 0);
  end;
end;

Die Prozedur muss dem OnMouseDown-Ereignis des entsprechenden Controls zugewiesen werden.Um die Aktion (Verschieben, Skalieren) zu wählen muss dem Parameter WParam von Perform einer der folgenden Werte zugewiesen werden.TWinControl-Größe ändern, nur linker Rand:

  ______
 |     Wert: $F001
  ------

TWinControl Größe ändern, nur rechter Rand:

  ______
    |   Wert: $F002
  ------

TWinControl Größe ändern, nur oberer Rand:

    ^
  __|___
 |  v   |   Wert: $F003
  ------

TWinControl Größe ändern, linker u. oberer Rand:

     ^
   __|___
v   |  Wert: $F004
   ------

TWinControl Größe ändern, rechter u. oberer Rand:

    ^
  __|___
 |  v  Wert: $F005
  ------

TWinControl Größe ändern, nur unterer Rand:

  ______
 |  ^   |   Wert: $F006
  --|---
    v

TWinControl Größe ändern, linker u. unterer Rand:

   ______  
^   |  Wert: $F007
   --|---
     v

TWinControl Größe ändern,rechter u. unterer Rand:

  ______
 |   ^ Wert: $F008
  ---|-- 
     v

TWinControl verschieben:

Wert: $F009
      $F011
      $F012

TWinControl wird minimiert:Wert: $F020-$F029TWinControl füllt den Clientbereich aus:Wert: $F030 – $F039