Type
TForm1 = Class(TForm)
Label1: TLabel;
Label2: TLabel; Private { Déclarations privées } // Méthode de message associée à WM_SIZING Procedure WMSizing(Var Mes: TMessage); message WM_SIZING; // Méthode de message associée à WM_MOVING Procedure WMMoving(Var Mes: TMessage); message WM_MOVING; Public { Déclarations publiques } End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
{ TForm1 }
// Le message WM_SIZING est envoyé durant le dimensionnement de la fiche // WParam permet de connaitre le sens du dimensionnement // LParam est un pointeur vers un TRect contenant les nouvelles coordonnées // des points haut-gauche et bas-droit de la fiche. En mettant à jour ces // points on peut limiter la dimensionde la fiche Procedure TForm1.WMSizing(Var Mes: TMessage); Var p:PRect; Begin // Affichage du type de dimensionnement Case Mes.WParam Of
WMSZ_BOTTOM :Label1.Caption:='Bas ';
WMSZ_BOTTOMLEFT :Label1.Caption:='Bas gauche';
WMSZ_BOTTOMRIGHT :Label1.Caption:='Bas droit';
WMSZ_LEFT :Label1.Caption:='Gauche';
WMSZ_RIGHT :Label1.Caption:='Droit';
WMSZ_TOP :Label1.Caption:='Haut';
WMSZ_TOPLEFT :Label1.Caption:='Haut gauche';
WMSZ_TOPRIGHT :Label1.Caption:='Haut droit'; End; // Limitation du dimensionnement
p:=PRect(Mes.LParam); If p^.Bottom >500 Then p^.Bottom :=500; If p^.Right >500 Then p^.Right :=500; If p^.top <100 Then p^.Top :=100; If p^.Left <100 Then p^.Left :=100; End;
// Le message WM_SIZING est envoyé durant le déplacement de la fiche // LParam est un pointeur vers un TRect contenant les nouvelles coordonnées // des points haut-gauche et bas-droit de la fiche. En mettant à jour ces // points on peut limiter la dimensionde la fiche, attention dans ce // message seul le point haut-gauche est utilisé pour le déplacement réel, // Le point bas-droit définit seulement la taille du rectangle affiché mais // n'influ pas sur la nouvelle position de la fiche. Procedure TForm1.WMMoving(Var Mes: TMessage); Var p:PRect; Begin // Limitation du déplacement
p:=PRect(Mes.LParam); If p^.top <100 Then p^.Top :=100; If p^.Left <100 Then p^.Left :=100; If (p^.top +Height)>500 Then p^.Top :=500-Height; If (p^.Left+Width )>500 Then p^.Left :=500-Width;
// Le point bas-droit est mis à jour seulement pour que le rectangle // de déplacement garde la taille de la fiche.
p.Right :=p^.Left+Width;
p.Bottom:=p^.Top +Height; End;