Das Ereignis OnChange hinzufügen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Durch die Tage navigieren

Nachdem die Kalenderbenutzer jetzt das Datum im Kalender ändern können, müssen Sie der Anwendung die Möglichkeit geben, auf diese Änderung zu reagieren.

Um TSampleCalendar das Ereignis OnChange hinzuzufügen, gehen Sie folgendermaßen vor:

  1. Deklarieren Sie das Ereignis, ein Feld zum Speichern des Ereignisses und eine dynamische Methode, die das Ereignis aufruft:
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. Schreiben Sie die Methode Change:

    procedure TSampleCalendar.Change;
    begin
      if Assigned(FOnChange) then FOnChange(Self);
    end;
    
    void __fastcall TSampleCalendar::Change()
    {
      if(FOnChange != NULL) FOnChange(this);
    }
    
  2. Rufen Sie am Ende der Methoden SetCalendarDate und SetDateElement die Methode Change auf:

    procedure TSampleCalendar.SetCalendarDate(Value: TDateTime);
    begin
      FDate := Value;
      UpdateCalendar;
      Change;                                      { Dies ist die einzige neue Anweisung }
    end;
    procedure TSampleCalendar.SetDateElement(Index: Integer; Value: Integer);
    begin
        .                                            { Anweisungen zum Setzen der Elementwerte }
        .
        .
        FDate := EncodeDate(AYear, AMonth, ADay);
        UpdateCalendar;
        Change;                                                        { Neue Anweisung}
      end;
    end;
    
    void __fastcall TSampleCalendar::SetCalendarDate(TDateTime Value)
    {
      FDate = Value;
      UpdateCalendar();
      Change();              // Dies ist die einzige neue Anweisung
    }
    void __fastcall TSampleCalendar::SetDateElement(int Index, int Value)
    {
      .
      .
      .    // Anweisungen zum Setzen der Elementwerte
      FDate = TDateTime(AYear, AMonth, ADay);
      UpdateCalendar();
      Change();              // Das ist neu
    }
    

Anwendungen, in denen die Kalenderkomponente eingesetzt wird, können nun auf Datumsänderungen reagieren, indem sie dem Ereignis OnChange eine entsprechende Behandlungsroutine zuweisen.

Siehe auch