TreeView|CheckBox Kombination - Statusabfrage misslingt



  • Hi,
    zur Kombination von TreeView und CheckBoxes hat jemand diese Anleitung gepostet:

    1. Add CheckBox in TreeView:
    SetWindowLong(TreeView1-> Handle, GWL_STYLE, GetWindowLong(TreeView1-> Handle,
    GWL_STYLE) | TVS_CHECKBOXES);
    2. Get Check State from node of TreView
    bool Checked = TreeView_GetCheckState(TreeView1-> Handle, Node-> ItemId);
    3. Set Node Checked status
    bool Checked = true;
    TreeView_SetCheckState(TreeView1-> Handle, TreeView1-> Selected-> ItemId, Checked);
    4. Set Node and child node checked
    void SetChildChecked(TTreeView *TreeView, TTreeNode *Node, bool Checked)
    {
    TreeView_SetCheckState(TreeView-> Handle, Node-> ItemId, Checked);
    for (int i=0; i Count; i++)
    SetChildChecked(TreeView, Node-> Item[i], Checked);
    }

    Was SetWindowLong() angeht, funktioniert das auch, aber die Statusabfrage bei (2) liefert nichts. Zum Test habe ich folgendes Minimalformular verwendet:

    #include <vcl.h>
        #include <commctrl.h>
        #pragma hdrstop
        #include "Unit1.h"
        #pragma package(smart_init)
        #pragma resource "*.dfm"
        TForm1 *Form1;
    
        __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
          {
          TTreeNode* tn;
          tv->Items->Add(tv->TopItem,"A");
          tn=tv->Items->Add(tv->TopItem,"B");
          tv->Items->Add(tv->TopItem,"C");
          tn=tv->Items->AddChild(tn,"B1");
          tv->Items->AddChild(tn,"B11");
          SetWindowLong(tv->Handle,GWL_STYLE,GetWindowLong(tv->Handle,GWL_STYLE) | TVS_CHECKBOXES);
          }
    
        void __fastcall TForm1::Button1Click(TObject *Sender)
          {
          // if(TreeView_GetCheckState(tv->Handle,tv->Items->Item[0]))
            ShowMessage("checked");
          else 
            ShowMessage("unchecked");
          }
    

    Kann mir jemand einen Tip geben, wie die hier auskommentierte Zeile korrekt lauten muss um den Status eines Knotens abzufragen?
    Vielen Dank
    Keltas



  • Hallo keltas,

    du mußt ja auch die ItemId übergeben (WinAPI-Funktionen kennen keine Objekte, sondern nur Handles oder Ids):

    if(TreeView_GetCheckState(tv->Handle,tv->Items->Item[0]->ItemId))
    

    P.S. pack deinen Code mal richtig in [ cpp ]-Tags 😉



  • Th69
    ausgezeichnet, es funktioniert. Vielen Dank!
    Keltas

    P.S: Sorry - habe vergessen die BBCode Deaktivierung zu deaktivieren.



  • keltas schrieb:

    habe vergessen die BBCode Deaktivierung zu deaktivieren.

    Kann man als registrierter Benutzer auch nachträglich korrigieren ...



  • 💡 Ahh


Anmelden zum Antworten