Rootnodes in einem TreeView durchsuchen

// alle Rootnodes in einem TreeView durchsuchen
if (TreeView1->Items->Count -> 0)
{
   TTreeNode *tn = TreeView1->Items->Item[0];
   // solange eine gültige Rootnode gefunden wurde
   while (tn != NULL)
   {
       // hier irgendwas mit der Node 'tn' machen
       tn->Text = "umbenannt";

       // nächste Rootnode suchen
       tn = tn->getNextSibling();
   }
}

TreeNodes anhand des Textes suchen

TTreeNode * __fastcall TForm1::GetNodeByText(AnsiString sSearchText)
{
      TTreeNode *pResultNode = NULL;
      TTreeNode *pNode = (TreeView1->Items->Count > 0) ? TreeView1->Items->Item[0] : NULL;

      // alle Nodes durchsuchen
      while (pNode != NULL)
      {
            if (UpperCase(pNode->Text) == UpperCase(sSearchText))
            {
                pResultNode = pNode;
                break;
            }

            // nächstes Item in der Liste TreeView1->Items heraussuchen
            pNode = pNode->GetNext();
      }

      return pResultNode;
}

Treeview-Item unter dem Mauscursor ermitteln

void __fastcall TForm1::TreeView1DblClick(TObject *Sender)
{
    TPoint P = Mouse->CursorPos;
    P = MenuTreeView->ScreenToClient(P);

    THitTests HT = MenuTreeView->GetHitTestInfoAt(P.x,P.y);
    TTreeNode *pItem = MenuTreeView->GetNodeAt(P.x,P.y);

    if (HT.Contains(htOnItem) || HT.Contains(htOnIcon))
    {
        AnsiString S = AnsiString("Item an Position ") + AnsiString(pItem->Level);
        ShowMessage(S);
    }
}

verschiedene Hints in einem Treeview anzeigen

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    Application->ShowHint = true;
    Application->OnShowHint = DoShowHint;
    Application->HintPause = 10;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::DoShowHint(System::AnsiString &HintStr, bool &CanShow, THintInfo &HintInfo)
{
    if (HintInfo.HintControl->ClassNameIs("TTreeView"))
    {
        HintInfo.HintMaxWidth = 200;
        HintInfo.HintPos.x += 10;
        HintInfo.ReshowTimeout = 50;
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::TreeViewMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if (Sender->ClassNameIs("TTreeView"))
    {
        TTreeNode *Node;
        Node = ((TTreeView*)Sender)->GetNodeAt(X, Y);

        if (Node == NULL)
        {
            ((TTreeView*)Sender)->ShowHint = false;
        }
        else
        {
            ((TTreeView*)Sender)->Hint = Node->Text;
            ((TTreeView*)Sender)->ShowHint = true;
        }
    }
}

In einem TreeView TreeNode->Data eine Struktur zuweisen

// erst ein Struct definieren
struct BeispielStruct
{
    AnsiString BeispielString;
    int iZahl;
}

// Struct dem TTreeNode zuweisen 
BeispielStruct* Test = new BeispielStruct;
Test->BeispielString = "Test";
Test->iZahl = 5;
TreeNode->Data = (void*)Test;

// Aufruf 
if (TreeNode->Data)
{
    BeispielStruct *Test = (BeispielStruct*)TreeNode->Data;
    ShowMessage(Test->BeispielString);
}

// Beim Beenden delete der einzelnen in TreeNode->Data gespeicherten Structe nicht vergessen!