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