AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VST - Knoten überspringen

Ein Thema von fanavity · begonnen am 27. Sep 2012 · letzter Beitrag vom 28. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#1

VST - Knoten überspringen

  Alt 27. Sep 2012, 11:48
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?
Miniaturansicht angehängter Grafiken
beispiel.png  
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.070 Beiträge
 
Delphi 12 Athens
 
#2

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:03
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Sep 2012 um 12:05 Uhr)
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#3

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:33
Danke

Es hat endlich geklappt.. Falls es jemanden interessiert, ich habe es folgendermaßen gemacht:

Delphi-Quellcode:
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;
Gibt es auch eine möglichkeit den baum zu durchlaufen ohne alles aufzuklappen ?
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:44
Gibt es auch eine möglichkeit den baum zu durchlaufen ohne alles aufzuklappen ?
Wäre mir neu, dass du den Baum aufklappen musst, um ihn durchlaufen zu können?
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#5

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:46
wenn er zugeklappt ist, hört er nach root auf..
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:49
Hä? 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.

Delphi-Quellcode:
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.
Nochmal Edit

Eigentlich hätte er nur einen Grund, nach dem Root aufzuhören, wenn er GetNextSibling auf ihn anwendet.

Geändert von nuclearping (27. Sep 2012 um 12:58 Uhr)
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#7

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 12:59
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!

Geändert von fanavity (27. Sep 2012 um 13:07 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 13:10
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.
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#9

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 13:14
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

Geändert von fanavity (27. Sep 2012 um 13:41 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: VST - Knoten überspringen

  Alt 27. Sep 2012, 13:45
Poste doch mal den Code vom Erstellen des Baums, sobald du kannst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz