Witam.
Jak w pętli zaznaczyć dzióbkiem wszystkie bądź wybrane wiersze w komponencie
VirtualStringTree. Przy generowaniu listy każdy wiersz posiada element CheckBox.
Generalnie chodzi mi o metodę z VST do zaznaczania CheckBoxa.
Help Adam
Witam.
Jak w pętli zaznaczyć dzióbkiem wszystkie bądź wybrane wiersze w komponencie
VirtualStringTree. Przy generowaniu listy każdy wiersz posiada element CheckBox.
Generalnie chodzi mi o metodę z VST do zaznaczania CheckBoxa.
Help Adam
Node.CheckState := csCheckedNormal; //zaznaczone
Node.CheckState := csUnCheckedNormal; //odznaczone
iterowanie po nodach
var
node: PVirtualNode;
begin
Node := VST.GetFirst;
while Node <> nil do
begin
//tu cokolwiek chcesz zrobić
Node := VST.GetNext(Node);
end;
i oczywiście czytałeś helpa i oglądałeś dema i NIGDZIE nie było...
Dzięki....... możesz mi jeszcze pomóc w temacie CheckBox-ów które są przypisane do
dzieci - jak (ręcznie) kliknę, zaznaczę Boxa rodzica to automatem zaznaczają się także CheckBox-y
dzieci.
CheckBox-y tworzę w zdarzeniu OnInitNode komponentu VST tak;
var
Poziom:Integer;
begin
Poziom:=Sender.GetNodeLevel(Node);
if Poziom<1 then
Include(InitialStates, ivsExpanded);
if Poziom>0 then
Node.CheckType:=ctCheckBox
else
Node.CheckType:=ctTriStateCheckBox;
end;
Jak to zmienić aby CheckBox-y dzieci były niezależne
HELP
Adam
przypomnij się w okolicach wtorku bo teraz nie mam gdzie sprawdzić. BTW dobrze by było jakbyś gdzieś wrzucił testową aplikację z przykładem błędnego działania
........ posiedziałem na testowym przykładzie (bo na takim lepiej się pracuje) i mam takie rozwiązanie:
procedure TForm1.BtGoClick(Sender: TObject);
var
I,J:Integer;
PVN,PVNChild:PVirtualNode;
begin
Randomize();
for I:=1 to 10 do
begin
VST1.RootNodeCount:=VST1.RootNodeCount+1;//kolejne linie
PVN:=VST1.GetLast;
DataVST1:=VST1.GetNodeData(PVN);
//nadanie wartosci
DataVST1.IdxParent:=I;
DataVST1.IdxChild:=0;
DataVST1.Nazwa:='Rodzic '+IntToStr(DataVST1.IdxParent);
if (I mod 2 = 0) then // child
begin
for J:=1 to RandomRange(2,6) do
begin
VST1.ChildCount[PVN]:=VST1.ChildCount[PVN]+1;
PVNChild:=VST1.GetLastChild(PVN);
DataVST1:=VST1.GetNodeData(PVNChild);
//nadanie wartosci
DataVST1.IdxParent:=I;
DataVST1.IdxChild:=J;
DataVST1.Nazwa:='Child '+IntToStr(DataVST1.IdxParent)+' - '+IntToStr(DataVST1.IdxChild);
end;
end;
end;
end;
procedure TForm1.VST1InitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
Poziom:Integer;
begin
Poziom:=Sender.GetNodeLevel(Node);
if Poziom<1 then
Include(InitialStates, ivsExpanded);
if Poziom>0 then
Node.CheckType:=ctCheckBox
else
Node.CheckType:=ctTriStateCheckBox;
end;
Teraz ChecBoxy wyświetlają się wszystkie jako kolejne dziecko głównego rodzica a nie każde dziecko jako dziecko dziecka
oraz zaznaczanie i odznaczanie jest niezależne.
Pytanko: jak najlepiej (z praktyki) rozwiązać przechowywani danych dziecka?? rekord danych dziecka jako obiekt w rekordzie przechowującym dane rodzica ???
Pozdrawiam
Adam