Ajout de la propriété ReadOnly

De RAD Studio
Aller à : navigation, rechercher

Remonter à Fonctionnement du contrôle en lecture seulement


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.


To add the ReadOnly property, follow these steps:

  1. Ajoutez la déclaration de la propriété ainsi qu'un champ privatepour contenir la valeur :
    Delphi:
    type
      TDBCalendar = class(TSampleCalendar)
      private
        FReadOnly: Boolean;                                     { field for internal storage }
      public
        constructor Create(AOwner: TComponent); override;     { must override to set default }
      published
        property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
      end;
    // …
    constructor TDBCalendar.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);                     { always call the inherited constructor! }
      FReadOnly := True;                                             { set the default value }
    end;
    
    C++:
    //header file
    class PACKAGE TDBCalendar : public TSampleCalendar
    {
    private:
        bool FReadOnly;                                  // field for internal storage
    protected:
    public:
        virtual __fastcall TDBCalendar(TComponent* Owner);
    __published:
        __property ReadOnly = {read=FReadOnly, write=FReadOnly, default=true};
    };
    
    //implementation file:
    virtual __fastcall TDBCalendar::TDBCalendar(TComponent* Owner) :
      TSampleCalendar(Owner)
    {
      FReadOnly = true;                                   // sets the default value
    }
    
  2. 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.

    Delphi:

    function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean;
    begin
      if FReadOnly then Result := False                         { cannot select if read only }
      else Result := inherited SelectCell(ACol, ARow);     { otherwise, use inherited method }
    end;
    

    C++:

    bool __fastcall TDBCalendar::SelectCell(long ACol, long ARow)
    {
      if (FReadOnly) return false;                        // can't select if read only
      return TSampleCalendar::SelectCell(ACol, ARow);     // otherwise, use inherited method
    }
    

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.

Voir aussi