delphi.gif (306 バイト) 標準イベント


イベントをコンポーネントに実装すると、コンポーネント内部で起こった出来事を外部へ知らせることができます。標準イベントとは、すべてのコントロールに対して定義されているイベントと、標準ウィンドウコントロールに対してのみ定義されている2種類があります。

 

toach.gif (917 バイト) イベントの一般知識

type
  TControl = class(TComponent)

  private
     FOnClick: TNotifyEvent; { メソッドポインタを収容するフィールドを宣言 }

     ・・・・
  protected
     property OnClick: TNotifyEvent read FOnClick write FOnClick;

  end;

注意
   TNotifyEvent = procedure(Sender: TObject) of object;

 

toach.gif (917 バイト) 標準イベントの種類

イベント コメント
OnClick  
OnDragDrop  
OnEndDrag  
OnMouseMove  
OnDblClick  
OnDragOver  
OnMouseDown  
OnMouseUp  
OnEnter 標準ウィンドウコントロールのみ
OnKeyDown 同上
OnKeyUp 同上
OnKeyPress 同上
OnExit 同上

標準ウィンドウコントロールとはTButtonのようなWindows自身が持つコントロールです。

 

toach.gif (917 バイト) イベントを公開するには

そのイベントをpublic(またはpusblished)として再宣言します。

   public
      property OnClick;

 

toach.gif (917 バイト) 標準イベントの処理の変更

変更したいイベントハンドラをオーバーライドすると、そのイベント処理で標準以外の処理を追加できます。つぎの例はTButtonのOnClickでボタンが押された回数をカウントできるように変更したものです。

delphi1.gif (322 バイト)

unit CountBtn;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  THisControl = class(TButton)
  private
    { Private 宣言 }
    FOnClick: TNotifyEvent;  // OnClickメソッドポインタ
    FCount: Integer;
  protected
    { Protected 宣言 }
    property OnClick: TNotifyEvent read FOnClick write FOnClick;
    procedure Click; override;
  public
    { Public 宣言 }
    constructor Create(AOwner: TComponent); override;
  published
    { Published 宣言 }
    property Count: Integer read FCount;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Private', [THisControl]);
end;

// コンストラクタ
constructor THisControl.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
    FCount := 0;
end;

//  クリックイベントハンドラ
procedure THisControl.Click;
begin
    inherited Click;
    Inc(FCount);
end;

end.