OnChange イベントの提供

提供: RAD Studio
移動先: 案内検索

日付(日)の変更 への移動


カレンダーのユーザーがカレンダー内の日付を変更できるようになったので、次に、アプリケーションがその変更に対応できるようにします。

TSampleCalendar への OnChange イベントの追加

  1. イベント、イベントを格納するフィールド、イベントを呼び出す動的メソッドを宣言します。
 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. Change メソッドを記述します。

    procedure TSampleCalendar.Change;
    begin
      if Assigned(FOnChange) then FOnChange(Self);
    end; 
    
    void __fastcall TSampleCalendar::Change()
    {
      if(FOnChange != NULL) FOnChange(this);
    }
    
  2. SetCalendarDate メソッドと SetDateElement メソッドの末尾に、Change を呼び出すステートメントを追加します。

    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
    }
    

これで、カレンダー コンポーネントを使用するアプリケーションは、OnChange イベントのハンドラを割り当てることで、コンポーネントの日付の変化に応答できるようになりました。

関連項目