Results 1 to 5 of 5

Thread: Virtual Treeview vraag

  1. #1

    Virtual Treeview vraag

    Kan iemand me op weg helpen met het volgende probleem:
    Op een form staan twee virtual treeviews en de bedoeling is dat als ik in tree1 op een (sub)node klik tree2 wordt gevuld met een tree die de aangeklikte (sub)node uit tree1 als root heeft. Dus het geheel gedraagt zich dan als Windows Verkenner.
    Ik heb geprobeerd dit te regelen via de OnNodeClick event maar deze event heeft enkel een virtual tree als parameter en geen node waardoor ik vast loop als ik in de routine de fullpath info van de aangeklikte node probeer te achterhalen.

    Code:
    procedure TfrmCopyBack.VDT1NodeClick(Sender: TBaseVirtualTree;
      const HitInfo: THitInfo);
    var
      Data1: PShellObjectData;
    begin
      Data1 := Sender.GetNodeData(Node);             // <==== Node is onbekend, dus geeft foutmelding
      edtTreePath.Text := Data1.FullPath;
    end;
    Helaas bieden de bij deze component meegeleverde demos geen voorbeeld voor zo'n constructie en ook op internet kom ik niet echt een voorbeeld tegen van een virtual treeview die wordt aangestuurd door een andere virtual treeview.
    Wie heeft hier ervaring mee?
    Last edited by JanRoza; 02-Nov-14 at 21:45.

  2. #2
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    De OnChange event van Tree1 kan gebruikt worden. Je kunt dan evt. ook gebruik maken van de ChangeDelay.
    Een ander event is de OnFocusChanged, hoewel die (dacht ik) niet in alle gevallen iedere verandering dekt.
    (edit: en je moet altijd checken of de node niet nil is, lijkt me)

  3. #3

    Thumbs up

    Goeie tip!
    In eerste instantie deed de OnChange het alleen bij de eerste muisklik op een node goed en kreeg ik een Access violation zodra ik daarna een andere node aanklikte. Jouw aanvullende tip over ChangeDelay bood hier echter uitkomst door deze een andere waarde dan 0 te geven gingen alle muisklikken ineens goed.

  4. #4
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Klinkt gevaarlijk. Ook bij een ChangeDelay van 0 zou hij het moeten doen lijkt me.
    In mijn fantasie zou het er ongeveer zo uit moeten zien:
    Code:
    procedure TSomeForm.Tree_Change(Sender: TBaseVirtualTree; Node: PVirtualNode);
    var
      Data: PShellObjectData;
    begin
      if (Sender.FocusedNode = Node) and (Node <> nil) then
      begin
        Data := Sender.GetNodeData(Node);          
        if Data <> nil then
          edtTreePath.Text := Data1.FullPath
        else
          // clear edtTree ?
      end
      else begin
        // clear edtTree ?
      end;
    end;

  5. #5
    Je hebt gelijk, maar ik zit wat betreft Virtual treeviews nog in het begin van de (stijle) leercurve. Met jouw constructie blijft alles werken, ook als ik de ChangeDelay op nul staat. Nu nog uitzoeken hoe ik tree2 steeds kan verversen met de inhoud van edtTreePath.Text als root node.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •