Fourniture d'un événement OnChange
Remonter à Navigation de jour en jour
Les utilisateurs de votre calendrier ont maintenant la possibilité de changer la date. Il paraît donc judicieux de répondre à ces changements.
Ajoutez un événement OnChange à TSampleCalendar.
- Déclarez l'événement ainsi qu'un champ pour le stocker et une méthode dynamique pour appeler l'événement : type
TSampleCalendar = class(TCustomGrid) private FOnChange: TNotifyEvent; protected procedure Change; dynamic; . . . published property OnChange: TNotifyEvent read FOnChange write FOnChange; . . .
class PACKAGE TSampleCalendar : public TCustomGrid { private: TNotifyEvent FOnChange; . . . protected: virtual void __fastcall Change(); __published: __property TNotifyEvent OnChange = {read=FOnChange, write=FOnChange}; . . . }
Ecrivez la méthode Change :
procedure TSampleCalendar.Change; begin if Assigned(FOnChange) then FOnChange(Self); end;
void __fastcall TSampleCalendar::Change() { if(FOnChange != NULL) FOnChange(this); }
Ajoutez les instructions appelant Change à la fin des méthodes SetCalendarDate et SetDateElement :
procedure TSampleCalendar.SetCalendarDate(Value: TDateTime); begin FDate := Value; UpdateCalendar; Change; { this is the only new statement } end; procedure TSampleCalendar.SetDateElement(Index: Integer; Value: Integer); begin . { many statements setting element values } . . FDate := EncodeDate(AYear, AMonth, ADay); UpdateCalendar; Change; { this is new } end; end;
void __fastcall TSampleCalendar::SetCalendarDate(TDateTime Value) { FDate = Value; UpdateCalendar(); Change(); // this is the only new statement } void __fastcall TSampleCalendar::SetDateElement(int Index, int Value) { . . . // many statements setting element values FDate = TDateTime(AYear, AMonth, ADay); UpdateCalendar(); Change(); // this is new }
Les applications qui utilisent le composant calendrier peuvent maintenant répondre aux changements en associant des gestionnaires à l'événement OnChange.