Ajout de la propriété ReadOnly
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:
- 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 }
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.