Zaznaczenie CheckBox w VirtualStringTree

Odpowiedz Nowy wątek
Adam
2011-11-26 16:03
Adam
0

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

Pozostało 580 znaków

2011-11-26 16:32

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Adam
2011-11-26 19:15
Adam
0

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

Pozostało 580 znaków

2011-11-26 22:28

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Adam
2011-11-27 20:47
Adam
0

........ posiedziałem na testowym przykładzie (bo na takim lepiej się pracuje) i mam takie rozwiązanie:

  • dodałem dodatkową zmienną PVNChild w procedurze ładującej dane do wirtualnego rekordu z VST
    
    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;

- w zdarzeniu onInitNode pozostało bez zmian
```delphi

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

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0