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!
KeltasP.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