Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VST betsimmten Node ansprechen (https://www.delphipraxis.net/135483-vst-betsimmten-node-ansprechen.html)

youuu 11. Jun 2009 16:36


VST betsimmten Node ansprechen
 
Hi,

Ich möchte gerne die Nodes in einer Schleife ansprechen, jedoch weiß ich nur wie ich den 1. und den 2. Node anspreche.

GetFirst 1. Node
GetFirst.NextSibling 2. Node

jedoch wie mache ich es per Schleife?

Delphi-Quellcode:
For i := 0 to Vst.RootNodeCount -1 do
Begin
  // ??
End;

jbg 11. Jun 2009 17:05

Re: VST betsimmten Node ansprechen
 
Du musst die Schleife zu einer while-Schleife umfunktionieren, dann geht das ziemlich einfach, da du dich von Knoten zu Knoten hangeln kannst
Delphi-Quellcode:
Node := Vst.GetFirstNode;
while Node <> nil do
begin
  // ... Mit Node etwas anstellen ...

  Node := Vst.GetNextSibling(Node);
end;

youuu 11. Jun 2009 17:24

Re: VST betsimmten Node ansprechen
 
Zitat:

Zitat von jbg
Du musst die Schleife zu einer while-Schleife umfunktionieren, dann geht das ziemlich einfach, da du dich von Knoten zu Knoten hangeln kannst
Delphi-Quellcode:
Node := Vst.GetFirstNode;
while Node <> nil do
begin
  // ... Mit Node etwas anstellen ...

  Node := Vst.GetNextSibling(Node);
end;

Zitat:

Zitat von jbg
Du musst die Schleife zu einer while-Schleife umfunktionieren, dann geht das ziemlich einfach, da du dich von Knoten zu Knoten hangeln kannst
Delphi-Quellcode:
Node := Vst.GetFirstNode;
while Node <> nil do
begin
  // ... Mit Node etwas anstellen ...

  Node := Vst.GetNextSibling(Node);
end;

klappt soweit nur wenn Node = "nicht existiert" knallt es bei mir und IDE schreit Zugriffsverletzung.

Edit:

Habe es nun so gelöst.

Delphi-Quellcode:
while Node <> nil do
begin
  if VstEmpfaengerGruppe.GetNext(Node) = nil then
    Exit;

  Node := Vst.GetNextSibling(Node);
end;

jbg 11. Jun 2009 18:28

Re: VST betsimmten Node ansprechen
 
Zitat:

Zitat von youuu
klappt soweit nur wenn Node = "nicht existiert" knallt es bei mir und IDE schreit Zugriffsverletzung.

Wie meinst du das? Wenn mein obiger Code nicht funktionieren würde, dann hätten einige Kunden ein ziemlich großes Problem, und das haben sie definitiv nicht, da der Code schon seit Jahren einwandfrei funktioniert. Wäre auch schlimm wenn GetNextSibling fehlerhaft wäre.

youuu 11. Jun 2009 19:59

Re: VST betsimmten Node ansprechen
 
So war das nicht gemeint, natürlich funktioniert er nur es tritt beim letzten Aufruf eine Exception mit Zugriffsverletzung auf.

jbg 11. Jun 2009 20:04

Re: VST betsimmten Node ansprechen
 
Zitat:

Zitat von youuu
es tritt beim letzten Aufruf eine Exception mit Zugriffsverletzung auf.

Welche VirtualTreeView Version hast du denn? Oder löscht du oder fügst du neue Knoten innerhalb der Schleife hinzu?

youuu 11. Jun 2009 20:43

Re: VST betsimmten Node ansprechen
 
Zitat:

Zitat von jbg
Zitat:

Zitat von youuu
es tritt beim letzten Aufruf eine Exception mit Zugriffsverletzung auf.

Welche VirtualTreeView Version hast du denn? Oder löscht du oder fügst du neue Knoten innerhalb der Schleife hinzu?

Nein ich füge keine hinzu, allerdings ignoriere ich den 1. Node


Delphi-Quellcode:
while Node <> nil do
begin
  if VstEmpfaengerGruppe.GetNext(Node) = nil then
    Exit;

  Node := Vst.GetNextSibling(Node);
end;
so geht es allerdings.

uligerhardt 11. Jun 2009 22:47

Re: VST betsimmten Node ansprechen
 
Du kannst auch mal IterateSubTree (oder so ähnlich?) ausprobieren.

generic 11. Jun 2009 23:07

Re: VST betsimmten Node ansprechen
 
getNext() und GetNextSibling() sind unterschiedliche Funktionen mit unterschiedlichen Zweck!
Mir leuchtet auch nicht ein was dein Konstrukt bezweckt.
Der Programmfehler kommt eher durch einen Programmfehler und nicht durch den VST.

Das Beispiel von jbg ist richtig und funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 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