Autor Téma: VirtualStringTree - priame získanie prvého uzla na úrovni +1 (parent vetvy)  (Přečteno 432 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Ja som prišiel len na spôsob postupného prechádzania uzlov smerom nahor, až sa mi zmení Level o +1. Ja tam síce veľa úrovní a v nich uzlov (okrem úrovne 0) nemám, ale rád by som to mal bez toho traverzovania.
Kód: Delphi [Vybrat]
  1.   Node := VST.GetPrevious(ANode); // ANode - Selected node
  2.   while VST.GetNodeLevel(Node) = User do
  3.     Node := VST.GetPrevious(Node);
  4.   FLevel1Data := VST.GetNodeData(Node);
  5.   Node := VST.GetPrevious(Node);
  6.   while VST.GetNodeLevel(Node) = Owner do
  7.     Node := VST.GetPrevious(Node);
  8.   FLevel2Data := VST.GetNodeData(Node);
Je to prvý nástrel. Takže to berte s rezervou. Pýta sa tu rekurzívne volanie. Po tom som ešte nešiel.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
rád by som to mal bez toho traverzovania.
Podivej se na definici TVirtualNode: tam jsou mj. pole Parent, FirstChild

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Už je načase študovať cudzie zdrojáky :) Pozriem sa na to.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Vynikajúco, presne to som chcel. A mnohokrát ani nemusím volať Vst.Get...NejakyNode
« Poslední změna: 10-01-2019, 14:01:05 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2309
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
rád by som to mal bez toho traverzovania.
Podivej se na definici TVirtualNode: tam jsou mj. pole Parent, FirstChild


To jo, ale správně by se mělo pro jistotu volat vt.GetFirstChild(node), protože to zaručí např. inicializaci uzlu, ale záleži na tom jak človek VT používá.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Ešte doplňujúca otázka. Ako zistím, že som už na prvom uzle VST. AbsoluteIndex neberiem do úvahy. Neodporúčajú s ním pracovať, nakoľko sa vnútorne môže zmeniť. Niekde mi raz niekto písal, že existuje uzol nad ním a je to ukazovateľ na (samotný strom?)??? a ja si nepamätám na čo a neviem to nájsť.
Pripomienku budem mať na pamäti.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2309
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Ešte doplňujúca otázka. Ako zistím, že som už na prvom uzle VST. AbsoluteIndex neberiem do úvahy. Neodporúčajú s ním pracovať, nakoľko sa vnútorne môže zmeniť. Niekde mi raz niekto písal, že existuje uzol nad ním a je to ukazovateľ na (samotný strom?)??? a ja si nepamätám na čo a neviem to nájsť.
Pripomienku budem mať na pamäti.

nejsem si jist co myslis prvnim uzlem VST.  zkus vt.RootNode .
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2309
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Ešte doplňujúca otázka. Ako zistím, že som už na prvom uzle VST. AbsoluteIndex neberiem do úvahy. Neodporúčajú s ním pracovať, nakoľko sa vnútorne môže zmeniť. Niekde mi raz niekto písal, že existuje uzol nad ním a je to ukazovateľ na (samotný strom?)??? a ja si nepamätám na čo a neviem to nájsť.
Pripomienku budem mať na pamäti.

nejsem si jist co myslis prvnim uzlem VST.  zkus vt.RootNode .

Pripadne vt.GetFirstChild(nil) nebo vt.GetFirstChild(vt.RootNode) ti vrati prvni uzel po RootNode, pokud je to, co myslis
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Ten vt.RootNode je to čo som hľadal.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.