TreeView Ebene formatieren



  • Hi

    Villeicht bin ich einfach zu blöde... Gibt es keinen einfachen Befehl resp. Methode um eine einzelne Ebene eines Objektbaumes fett darzustellen?
    Wenn es das nicht gibt wie mache ich es dann 😕

    THX



  • Von Hand, im OnCustomDrawItem-Event.



  • Ja schon. Aber wie manuell?
    Ich schaffs nur alle Texte des Baums Fett darzustellen (Tree->Style = TFontStyles()<< fsBold;), aber wie nur eine einzelne Ebene?



  • Per OnCustomDrawItem zeichnest du alle Items selbst, kannst also das Aussehen von Fall zu Fall beeinflussen.
    Das Beispiel in der Hilfe zu TTreeView::OnCustomDrawItem hast du dir angesehen?



  • Hat endlich einigermassen gefunzt, habs zuerst auch mut dem Beispiel ausprobiert, hab sehr wahrscheinlich zuerst etwas falsch eingetipt.

    Aber richtig tuts doch nicht!
    Die Formatierung findet zwar vor dem erstellen des Objekts stat, angewendet wird sie jedoch erst beim übernächsten Objekt! Und ich muss das erste Objekt formatieren!

    Heute läuft irgendwie alles Scheisse



  • Ach ja noch was. Wiso zeichnet er den Baum zwei mal?



  • Keine Ahnung, was du mit zweimal zeichnen meinst.

    In diesem Beispiel wird jedes zweite Item fett dargestellt.

    void __fastcall TForm1::TreeView1CustomDrawItem(TCustomTreeView *Sender,
          TTreeNode *Node, TCustomDrawState State, bool &DefaultDraw)
    {
      TreeView1->Canvas->Font->Style = TreeView1->Canvas->Font->Style << fsBold;
      for (int i = 0; i < TreeView1->Items->Count; i++)
      {
        // prüfen, ob der Index des aktuellen Items gerade oder ungerade ist
        if (Node == TreeView1->Items->Item[i] && !(i % 2))
        {
          TreeView1->Canvas->Font->Style = TreeView1->Canvas->Font->Style >> fsBold;
          break;
        }
      }
      TRect NodeRect = Node->DisplayRect(true);
      TreeView1->Canvas->TextOut(NodeRect.Left, NodeRect.Top, Node->Text);
    }
    


  • Ja, endlich funktionierts wie ich will 🙂
    Ich hab das Canvas vergessen hab nur ObjectTree->Font->Style geschrieben.
    Das hat aber doch irgendwie zur Hälfte gefunzt.
    Wie gesagt hat es erst das nächste Item fett geschrieben und der Objektbaum wurde schlussendlich endlos immer wieder neu gezeichnet während des laufenden Programms.

    Echt, Es gibt Tage d hasse ich was ich mache 🙄

    Danke nochmals


Anmelden zum Antworten