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);
}
Pingback: ツリービューのノードのDataプロパティに文字列を設定する « 山本隆の開発日誌
Pingback: DelphiでTListItemを継承した項目をリストビューに追加する - 山本隆の開発日誌