Ajout de la propriété ReadOnly

De RAD Studio (Français)

Remonter à Contrôles orientés données - Index

En ajoutant une propriété ReadOnly, vous fournissez le moyen de rendre le contrôle accessible en lecture seulement au moment de la conception. Si la valeur de cette propriété est True toutes les cellules du contrôle perdront la capacité à être sélectionnées.

Pour ajouter la propriété ReadOnly, suivez ces étapes :

  1. Ajoutez la déclaration de la propriété ainsi qu'une donnée membre private pour contenir la valeur :
 type
   TDBCalendar = class(TSampleCalendar)
   private
     FReadOnly: Boolean;                                     { champ de stockage interne }
   public
     constructor Create(AOwner: TComponent); override;     { doit effectuer une redéfinition pour définir les valeurs par défaut }
   published
     property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
   end;
 .
 .
 .
 constructor TDBCalendar.Create(AOwner: TComponent);
 begin
   inherited Create(AOwner);                     { appeler toujours le constructeur hérité ! }
   FReadOnly := True;                                             { définir la valeur par défaut }
 end;
 
 // fichier en-tête
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
 private:
     bool FReadOnly;                                        // champ de stockage interne
 protected:
 public:
     virtual __fastcall TDBCalendar(TComponent* Owner);
 __published:
     __property ReadOnly = {read=FReadOnly, write=FReadOnly, default=true};
 };
 
 // fichier d'implémentation :
 virtual __fastcall TDBCalendar::TDBCalendar(TComponent* Owner) :
   TSampleCalendar(Owner)
 {
   FReadOnly = true;                                         // définit la valeur par défaut
 }
  1. Redéfinissez la méthode SelectCell pour inhiber la sélection si le contrôle est accessible en lecture seulement. L'utilisation de SelectCell est expliquée dans Exclusion des cellules vides.
 function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean;
 begin
   if FReadOnly then Result := False                         { sélection impossible en cas de lecture seule }
   else Result := inherited SelectCell(ACol, ARow);     { sinon, utiliser la méthode héritée }
 end;
 bool __fastcall TDBCalendar::SelectCell(long ACol, long ARow)
 {
   if (FReadOnly) return false;                              // sélection impossible si accès en lecture seule
   return TSampleCalendar::SelectCell(ACol, ARow);     // sinon, utilise la méthode héritée
 }


N'oubliez pas d'ajouter la déclaration de SelectCell à la déclaration de la classe de TDBCalendar, et ajoutez la directive override.

Si vous ajoutez maintenant le calendrier à une fiche, vous vous rendez compte que le composant ignore les clics de souris et les frappes de touches. Et il ne met plus à jour la position de la sélection lorsque vous changez la date.

Autres langues