Generowanie drzewa na podstawie ListView

0

Mam Listboxa o takiej zawartości:

nazwa , level
wszystkie , 0
PLC , 1
et200s , 2
S7-1200 , 2
Automatyka , 1
Safety , 1

Jest to struktura drzewa która powinna wyglądać tak:

wszystkie
|_PLC
    |_et200s
    |_S7-1200
|_Automatyka
|_Safety

Mam zainstalowaną kontrolkę Virtual Treeview lecz nie miałem do tej pory styczności z tego typu strukturami i mam problem z wygenerowaniem takiego drzewa.

Mógłby ktoś podrzucić tutaj kod generowania takiego drzewa w tej kontrolce na podstawie tego listview?

Pozdrawiam
Piotr

0

Poradziłem sobie w ten sposób:

 
procedure TMainForm.Button3Click(Sender: TObject);
var
 i, j: integer;
 level: integer;
 node: PVirtualNode;
 levelStary: integer;
begin
  VST.Clear;
  levelStary := 0;
  for i:=0 to listaKategorii.Items.Count-1 do begin
  level := strtoint(listaKategorii.Items[i].SubItems[3]);

  case level of
      0: // add to root
        begin
        node := vst.AddChild(nil);
        end;
      else // add as child
      begin
      if (level - levelStary) = 1 then
      node := vst.AddChild(node)
      else
      if (level = levelStary) then
      node := vst.AddChild(node.Parent)
      else
      if (level - levelStary) < 0 then
      begin
      for j:=0 to (levelStary - level) do node := node.Parent;
      node := vst.AddChild(node);
      end; //if
      end; //else begin
      end; //case
   levelStary := level;
   end; //for
  vst.FullExpand();
end;                          

Rozróżniam trzy przypadki:

  1. następny NODE jest childem poprzedniego (czyli level-levelstary = 1)
  2. następny NODE jest równorzędny do poprzedniego (czyli level = levelstary)
  3. następny NODE jest podrzędny w stosunku do poprzedniego (czyli level < levelstary).
    Dla przypadku 3 muszę tylko ustalić o ile poziomów muszę się cofnąć (robi to pętla "for j").

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