TTreeView 無內建 Node->Enabled 屬性。需自行實現:節點字體灰色、不可選中、不可展開。
void __fastcall SetNodeEnabled(bool Enabled, TTreeNode *Node)
{
Node->Data = Enabled ? NULL : (void*)0xFFFF; // 標記
Node->TreeView->Invalidate(); // 觸發重繪
}
void __fastcall TForm1::TreeView1CustomDrawItem(TCustomTreeView *Sender,
TTreeNode *Node, TCustomDrawState State, bool &DefaultDraw)
{
if ((int)Node->Data == 0xFFFF) // 禁用標記
Sender->Canvas->Font->Color = clGray;
// DefaultDraw = true 保持預設繪製邏輯 (僅改顏色)
}
void __fastcall TForm1::TreeView1Changing(TObject *Sender, TTreeNode *Node, bool &AllowChange)
{
AllowChange = ((int)Node->Data != 0xFFFF); // 禁用則不允許切換選中
}
void __fastcall TForm1::Button1Click(TObject *Sender) // 禁用當前選中節點
{
if (TreeView1->Selected) SetNodeEnabled(false, TreeView1->Selected);
}
void __fastcall TForm1::Button2Click(TObject *Sender) // 啟用第2個節點
{
SetNodeEnabled(true, TreeView1->Items->Item[1]);
}
// FormCreate 中展開所有節點以便測試
TreeView1->FullExpand();

禁用節點顯示灰色、點擊無反應、鍵盤導航跳過。若原專案已使用 Data 屬性,可改用 StateIndex、自訂結構體指標等替代標記方式。