[C++Builder]TTreeNodeを継承した独自のノードをツリービューに追加する

TTreeNodeを継承した独自のノードをツリービューに追加するには、OnCreateNodeClassイベントを使用します。

OnCreateNodeClassイベントはノードを作成しようとした時に発生します。
引数のNodeClassに、作成するノードのクラス参照を渡すことで、独自のノードを追加できます。

サンプルコードは、ユニークなコードを持つ独自のノードクラスを追加します。
ノードをクリックすると、ステータスバーにノードのコードを表示します。

static int CodeValue = 0;
//独自のノードクラス
class TMyNode : public TTreeNode
{
public:
  __fastcall virtual TMyNode(TTreeNodes* AOwner)
    : TTreeNode(AOwner), FCode(++CodeValue) {}
  __property int Code = { read=FCode };
private:
  int FCode;
};

TreeView1のOnCreateNodeClassイベントを追加します。

void __fastcall TForm1::TreeView1CreateNodeClass(TCustomTreeView *Sender, TTreeNodeClass &NodeClass)
{
  NodeClass = __classid(TMyNode); //独自のノードクラス
}

ボタンを押した時、新しいノードを追加する。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //OnCreateNodeClassイベントで指定した独自のノードクラスを使って
  //新しいノードが作成されます。
  TreeView1->Items->AddChild(TreeView1->Selected, "item");
}

ノードをクリックした時、ステータスバーにノードのコードを表示する

void __fastcall TForm1::TreeView1Click(TObject *Sender)
{
  TTreeNode* selected = TreeView1->Selected;
  if (selected == NULL) return;
  TMyNode* myNode = dynamic_cast<TMyNode*>(selected);
  if (myNode == NULL) return;
  //独自のノードクラスが持つCodeプロパティの値を表示します。
  StatusBar1->SimpleText = IntToStr(myNode->Code);
}

コメント

  1. Pingback: ツリービューのノードのDataプロパティに文字列を設定する « 山本隆の開発日誌

  2. Pingback: DelphiでTListItemを継承した項目をリストビューに追加する - 山本隆の開発日誌

コメントを残す

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

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