![]() |
VST - Knoten überspringen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein Problem mit einem Virtual String Tree. Dazu habe ich ein Bild gezeichnet. Ich möchte nun folgendes szenario abbilden. Wenn ein Knoten unter dem Root ein Flag hat, möchte ich all seine Kinder nicht mehr durchlaufen. Den rest aber schon. Ich stehe gerade auf dem Schlauch und weiß nicht so recht wie ich an die Sache rangehen soll. Die Kinder haben keine flags und sollen auch keine bekommen. Die Kinder könnten allerdings noch weitere Ebenen haben, welche ich auch ignorieren will. Sobald einer der der oberen Knoten geflagt ist, will ich alles daran hängende überspringen. Gibt es da eine einfache möglichkeit das umzusetzen? |
AW: VST - Knoten überspringen
Gibt es nicht sowas wie Folgendes?
- node.nextSibling (in den nächsten Knoten gleicher Ebene, aka Childs überspriongen) - node.firstChild (in die Childs rein, natürlich nur, wenn's Welche gibt) - node.next (in den nächsten Knoten rein) Nja, nun mußt du dir nur noch raussuchen, was du als nächstes haben willst. Wenn node.level <> 1. Ebene oder wenn Flag nicht gesetzt, dann immer node.next, ansonsten (wenn node.level = 1. Ebene und Flag gesetzt) node.nextSibling und wenn das NIL ist, dann node.lastChild.next, aber wenn node.lastChild = nil, dann node.next :stupid: |
AW: VST - Knoten überspringen
Danke :)
Es hat endlich geklappt.. Falls es jemanden interessiert, ich habe es folgendermaßen gemacht:
Delphi-Quellcode:
Gibt es auch eine möglichkeit den baum zu durchlaufen ohne alles aufzuklappen :)?
procedure Form1.Test();
var n : PVirtualNode; Data : PNodeData; begin try vst.BeginUpdate; n := vst.GetFirst; vst.FullExpand(n); while n <> nil do begin Data := vst.GetNodeData(n); if not Data^.flag then begin //tu etwas n := vst.GetNext(n); end else begin n := vst.GetNextSibling(n); end; end; finally vst.FullCollapse(vst.getFirst); vst.EndUpdate; end; end; |
AW: VST - Knoten überspringen
Zitat:
|
AW: VST - Knoten überspringen
wenn er zugeklappt ist, hört er nach root auf..
|
AW: VST - Knoten überspringen
Hä? :stupid: Wie baust du denn den Baum auf? Normal ist es dem VST völlig wurscht, ob er aufgeklappt ist, oder nicht, da er die ganze Struktur intern handelt.
Edit Grad mal 'n Testprojekt gemacht. Geht. Irgendwas musst du falsch machen. :mrgreen:
Delphi-Quellcode:
Nochmal Edit
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VirtualTrees; type TForm1 = class(TForm) VirtualStringTree1: TVirtualStringTree; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i, a, b: Integer; Node, ParentNode: PVirtualNode; begin Randomize; // Zufällige Baumstruktur erstellen ParentNode := nil; for i := 0 to 99 do begin Node := VirtualStringTree1.AddChild(ParentNode); if (i + 1) mod (Random(2) + 1) = 0 then begin ParentNode := Node; end else ParentNode := nil; end; a := VirtualStringTree1.TotalCount; // Baumstruktur durchlaufen b := 0; Node := VirtualStringTree1.GetFirst; while Assigned(Node) do begin Inc(b); Node := VirtualStringTree1.GetNext(Node); end; ShowMessage(IntToStr(a) + ' <> ' + IntToStr(b)); end; end. Eigentlich hätte er nur einen Grund, nach dem Root aufzuhören, wenn er GetNextSibling auf ihn anwendet. |
AW: VST - Knoten überspringen
Bei mir wird auch erst das "+" angezeigt wenn ich doppelt drauf klicke.. daher habe ich immer ein expand gemacht.. ister aber ziemlich nervig.. da man sich entweder den status der nodes merken muss oder der baum ist nach jeder aktion ein/ausgeklappt.. habe den quellcode des erstellens gerade nicht parat..
EDIT: ich arbeite mit getNext Und wie gesagt, zeigt er mir auch nur den oberen Punkt an. Das Plus erscheint erst mit klick auf den RootPunkt.. Dann sind alle sofort sichtbar. Ein onclick ereignis gibt es nicht! |
AW: VST - Knoten überspringen
Was für eine Delphi-Version? Und was für eine Version vom VST? Vielleicht noch eine alte mit 'nem Bug? Wäre auch interessant zu sehen, wie du den Baum aufbaust.
|
AW: VST - Knoten überspringen
delphi 5 mit entsprechender version vom vst..
Ein bug ist es nicht. Da es in anderen Projekten klappt. Ich mache scheinbar irgendetwas falsch. Leider finde ich den fehler aber nicht, wie gesagt den quellcode des erstellen habe ich gerade nicht parat. EDIT: bin gerade echt am verzweifeln und suche mir nen wolf.. wenn jemand eine idee hat immer her damit :) |
AW: VST - Knoten überspringen
Poste doch mal den Code vom Erstellen des Baums, sobald du kannst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz