クラスヘルパーを使うと、既存のクラスを継承しなくても拡張することができます。
■サンプル
次の例はTListBoxにItemIndexValueという関数を追加しています。
デザインモードではいつも通りにコンポーネントを配置します。
クラスヘルパーでTListBoxにItemIndexValue関数を追加します。
type
TListboxHelper = class helper for TListBox
function ItemIndexValue: String;
end;
implementation
function TListboxHelper.ItemIndexValue: String;
begin
Result := '';
if ItemIndex >= 0 then
Result := Items[ItemIndex];
end;
ListBox1をクリックした時、選択されている項目をEdit1に表示します。
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Edit1.Text := ListBox1.ItemIndexValue; //追加した関数を呼び出す
end;
ListBox1の項目を選択すると、項目の値がEdit1に表示されます。
■おまけ
TListBoxを継承した同名のクラスを作成する方法もあります。
type
//標準のTListBoxを継承した新しいTListBoxを作成
//コンパイラはこっちのTListBoxを優先して使用する
TListbox = class (StdCtrls.TListBox)
function ItemIndexValue: String;
end;
implementation
function TListbox.ItemIndexValue: String;
begin
Result := '';
if ItemIndex >= 0 then
Result := Items[ItemIndex];
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Edit1.Text := ListBox1.ItemIndexValue; //追加した関数を呼び出す
end;
2011年8月22日追記:名前空間の検索順序に関する間違った記述を削除した。