Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
tja, das ist halt ein Problem in deiner Implementierung.
Wenn alles in einer Struktur stehen soll, dann brauchst du eine zuverlässige Methode die Nodes zu unterscheiden.
Kann man eigentlich einen Index erhalten? (also der wievielte SubNode es innerhalb des Eltern-Knotens ist?)
var
Level, Index: Integer;
DataSys : TOSYSTEM;
begin
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
v = der tatsächliche Level
0 -Level1
1 -Level2
2 -Level3
2 -Level3
var
Level: Integer;
DataSys : TOSYSTEM;
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
pNode := VSTSystem.AddChild(nil,DataSys);
pNode := VSTSystem.AddChild(pNode);
pNode := VSTSystem.AddChild(pNode);
VSTSystem.AddChild(pNode);
Hier wäre nur einem Knoten das Objekt zugewiesen und die untergeordneten Objekte holen sich die Daten dann von dort.
Nocheine Alternative wäre:
man hält die Objekte in einer weiteren Liste, welche diese Objekte verwaltet und später auch freigibt...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
ich hab jetzt leider nicht den Aufbau des VST im Kopf ... aber irgendwie muß es ja möglich sein, den Parent eines Nodes abzufragen :stupid:
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
müßte dann wohl irgendwie so aussehn ... in diesem Fall müßtest du ja erstmal den Node suchen.
var
Node: PVirtualNode;
Level: Integer;
DataSys : TOSYSTEM; // ein Zeiger auf die Datenstruktur
begin
Level := VSTSystem.GetNodeLevel(Node);
while TOSYSTEM(VSTSystem.GetNodeData(Node)^) = nil do
Node := Node.ParentNode;
DataSys := TOSYSTEM(VSTSystem.GetNodeData(Node)^);
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
Edit mißt, daß dereferenzieren war hier ja nötig :wall:
also nur sirius's vorschlag.
Entweder du gibts beim Fregeiben nur das Objekt vom Elternnode (Level1) frei und nicht bei den SubNodes,
dann wird es auch nur einmal Freigegeben
oder du gibst nur dem Elternnode das Objekt
pNode := VSTSystem.AddChild(nil, DataSys);
pNode := VSTSystem.AddChild(pNode);
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by himitsu,
4. Dez 2009
laß mal das ^ weg
DataSys := TOSYSTEM(VSTSystem.GetNodeData(Node));
du hat ja die Instanz gespeichert und nicht einen Zeiger auf die Instanz, also brauchst/darfst du auch nicht dereferenzieren :zwinker:
Und dann natürlich das von sirius schon Gesagte.
PS: wozu das With, wenn du dann eh die Variable wieder verwendest?
with DataSys do