手続きとしてのイベント ハンドラ型

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

メソッド ポインタ型としてのイベント型 への移動


メソッド ポインタ型を関数として宣言してもコンパイルはできますが、イベントの処理にはそれは絶対にしないでください。空の関数から返される結果は未定義なので、空のイベント ハンドラが関数の場合は必ずしも有効とは限りません。そのため、イベントとそれらに関連付けられるイベント ハンドラはすべて手続きにします。

イベント ハンドラを関数にすることはできませんが、それでも、var パラメータを使用すれば、アプリケーション開発者のコードでイベント ハンドラから情報を取得することができます。その場合は、ユーザーのコードで値を変更しなくてもよいように、必ずパラメータに有効な値を割り当ててから、ハンドラを呼び出します。

var パラメータをイベント ハンドラに渡す例としては、TKeyPressEvent 型の OnKeyPress イベントがあります。TKeyPressEvent には、次のように、2 つのパラメータが定義されています。1 つは、どのオブジェクトでイベントが発生したかを示すもので、もう 1 つは、どのキーが押されたかを示すものです。

type
  TKeyPressEvent = procedure(Sender: TObject; var Key: Char) of object;

通常、Key パラメータには、ユーザーに押されたキーの文字が格納されます。ただし、場合によっては、コンポーネントのユーザーがその文字を変更することもあります。たとえば、エディタですべての文字を強制的に大文字にするような場合です。その場合、ユーザーは、キー入力のハンドラを次のように定義できます。

procedure TForm1.Edit1KeyPressed(Sender: TObject; var Key: Char);
begin
  Key := UpCase(Key);
end;

また、var パラメータを使用して、ユーザーがデフォルトの処理をオーバーライドできるようにすることも可能です。

関連項目