Delphiのインターセプタークラス(フォームに配置したコントロールに対して機能を拡張する方法)

インターセプタークラス(interceptor class)というおもしろいテクニックが、DELPHI 2009 HANDBOOKで紹介されていました。

このテクニックを使うと、フォームに配置したコントロールに対して機能を拡張することができます。

Buttonなどの既存のコントロールをちょっと拡張したい、
拡張したコントロールは、IDEのフォーム上で配置したい、
でも、わざわざIDEに拡張したコントロールをインストールすることはやりたくない、
そんな悩みを解決します。

方法は簡単です。

例えばTButtonを拡張する場合の方法です。

ベースクラスであるTButtonと同じ名前を持つ派生クラスをフォームユニットに作成します。
ベースクラスは完全名(ユニット名.クラス名)で指定します。

// interceptor class
TButton = class (StdCtrls.TButton)
  //なんらかの拡張をします
end;

TFormAnonButton = class(TForm)
  btnInvoke: TButton;  //拡張したTButtonが使用されます
  …

手軽にできますから、ちょっとした拡張にはとても便利です。

インターセプタークラスがフォームユニットではなく、別のユニットにある場合は、注意が必要です。

インターセプタークラスの定義が別のユニットになる場合、そのユニットは、use文で、ベースクラスを定義しているユニットの後ろに列挙されなければならない

DELPHI 2009 HANDBOOK

インターセプタークラスはおそらく古いDelphiでも使えるテクニックだと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください