Fourniture d'un événement OnChange

De RAD Studio
Aller à : navigation, rechercher

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.

  1. 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};
    .
    .
    .
}
  1. 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);
    }
    
  2. 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.

Voir aussi