Redimensionnement des cellules

De RAD Studio
Aller à : navigation, rechercher

Remonter à Personnalisation d'une grille - Index

Remarque :  Lorsqu'un utilisateur ou une application modifie la taille d'une fenêtre ou d'un contrôle, Windows envoie le message WM_SIZE à la fenêtre ou au contrôle concerné pour lui permettre d'ajuster les paramètres nécessaires afin de dessiner ultérieurement son image dans la nouvelle taille. Votre composant VCL peut répondre à ce message en modifiant la taille des cellules de façon à ce qu'elles s'inscrivent dans les limites du contrôle. Pour répondre au message WM_SIZE, vous devez ajouter au composant une méthode de gestion du message.

La création d'une méthode de gestion de message est décrite en détail dans la section Création de nouveaux gestionnaires de messages.

Dans notre exemple, le contrôle calendrier devant répondre au message WM_SIZE, vous devez ajouter une méthode protégée appelée WMSize au contrôle indexé sur le message WM_SIZE, puis écrire la méthode de calcul de la taille des cellules qui permettra à toutes d'être visibles :



 type
   TSampleCalendar = class(TCustomGrid)
   protected
     procedure WMSize(var Message: TWMSize); message WM_SIZE;
   .
   .
   .
   end;
 .
 .
 .
 procedure TSampleCalendar.WMSize(var Message: TWMSize);
 var
   GridLines: Integer;                                         { variable locale temporaire }
 begin
   GridLines := 6 * GridLineWidth;                 { calculer la taille combinée de toutes les lignes }
   DefaultColWidth := (Message.Width - GridLines) div 7;     { définir la nouvelle largeur de cellule par défaut }
   DefaultRowHeight := (Message.Height - GridLines) div 7;              { ainsi que sa hauteur }
 end;



 
 // fichier en-tête
 class PACKAGE TSampleCalendar : public TCustomGrid
 {
 .
 .
 .
 protected:
     void __fastcall WMSize(TWMSize &Message);
 BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
 END_MESSAGE_MAP(TCustomGrid)
 };



 
 // fichier d'implémentation
 void __fastcall TSampleCalendar::WMSize(TWMSize &Message)
 {
   int GridLines;                                  // variable locale temporaire
   GridLines = 6 * GridLineWidth;                  // calcul de la taille combinée de toutes les lignes
   DefaultColWidth = (Message.Width - GridLines) / 7;    // nouvelle largeur de cellule par défaut
   DefaultRowHeight = (Message.Height - GridLines) / 7;  // et nouvelle hauteur de cellule par défaut
 }



Maintenant lorsque le calendrier est redimensionné, il affiche toutes les cellules dans la taille maximum avec laquelle ils peuvent rentrer dans le contrôle.

Dans ce cas, le contrôle calendrier doit redéfinir BoundsChanged afin qu'elle calcule la taille de cellule adéquate pour que toutes les cellules soient visibles avec la nouvelle taille :



 type
   TSampleCalendar = class(TCustomGrid)
   protected
     procedure BoundsChanged; override;
   .
   .
   .
   end;
 .
 .
 .
 procedure TSampleCalendar.BoundsChanged;
 var
   GridLines: Integer;                                         { variable locale temporaire }
 begin
   GridLines := 6 * GridLineWidth;                 { calculer la taille combinée de toutes les lignes }
   DefaultColWidth := (Width - GridLines) div 7;     { définir la nouvelle largeur de cellule par défaut }
   DefaultRowHeight := (Height - GridLines) div 7;              { ainsi que sa hauteur }
   inherited; {appeler maintenant la méthode dérivée }
 end;



 
 // fichier en-tête
 class PACKAGE TSampleCalendar : public TCustomGrid
 {
 .
 .
 .
 protected:
     void __fastcall BoundsChanged(void);
 };



 
 // fichier d'implémentation
 void __fastcall TSampleCalendar::BoundsChanged(void)
 {
   int GridLines;                                  // variable locale temporaire
   GridLines = 6 * GridLineWidth;                  // calcul de la taille combinée de toutes les lignes
   DefaultColWidth = (Width - GridLines) / 7;    // nouvelle largeur de cellule par défaut
   DefaultRowHeight = (Height - GridLines) / 7;  // nouvelle hauteur de cellule par défaut
   TCustomGrid::BoundsChanged(); // appelle la méthode héritée
 }