Developpez.com - Delphi
X

Choisissez d'abord la catégorieensuite la rubrique :

Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
75 - LIMITER LE DÉPLACEMENT/DIMENSIONNEMENT D'UNE FICHE

PRÉSENTATION : Limiter le déplacement/dimensionnement d'une fiche
ZIP : Téléchargez le zip APERÇUS :

NOTES : Gestion des messages windows WM_SIZING et WM_MOVING pour contrôler le dimensionnement et le déplacement d'une fiche.

CODE :
//
// Sujet : Limiter le déplacement/dimensionnement d'une fiche
//
// Par Nono40 : http://nono40.developpez.com   http://nono40.fr.st
//              mailTo:nono40@fr.st
//
// Le 13/01/2004
//

Unit Unit1;

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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;

end.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -