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 VirtualTreeView: Kompletten Subtree kopieren? (https://www.delphipraxis.net/71992-virtualtreeview-kompletten-subtree-kopieren.html)

JPSelter 23. Jun 2006 11:27


VirtualTreeView: Kompletten Subtree kopieren?
 
Bietet VTV eine Möglichkeit einen kompletten Subtree zu kopieren und an einen anderen Knoten anzuhängen? Oder muss ich das zu Fuss programmieren. Das dürfte einiges an Aufwand sein fürchte ich.

generic 23. Jun 2006 11:32

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Delphi-Quellcode:
vst.copyto(...);
biete sich da an.

JPSelter 23. Jun 2006 11:34

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Ah, sehr gut, hatte schon Angst, man müsste das alles selber machen. Geil dieses VTV :D

JPSelter 23. Jun 2006 13:56

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Bekomme leider eine Exception mit dem Hinweis, dass ich nicht genügend RAM hätte... RAM-Verbrauch wächst dabei auf 1,3GB... ist aber unwichtig, die Exception selbst ist das Problem, nicht der RAM.

Also, die Zeile lautet nun

Delphi-Quellcode:
Form1.VST1.CopyTo(Node,currentNode,amInsertAfter,true);
Node ist der Quell-Knoten mit all seinen Children, currentNode der gerade neu eingehängte und der Ziel-Knoten, der all die anderen Children bekommen soll, das InsertAfter sollte stimmen, und true weil ich nur die Children des Quell-Knotens haben will. Aber wo ist nun der Fehler? Im Debugger sehe ich, dass beide Nodes auf einen Speicherbereich zeigen, also definiert sind.

generic 23. Jun 2006 15:42

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
vieleicht eine endlos schleife in der sich copyto verfängt.
kannst du ausschliessen das die "zu kopierenden" wieder vom selben prozess kopiert werden?

Code:
1
+-2
  +-ziel
knoten 1 soll nach ziel kopiert werden -> geht nicht weil du endlos viele knoten kopieren würdest.

JPSelter 23. Jun 2006 16:02

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Bin grad wieder von der Arbeit zu Hause, kanns nun nicht genau verifizieren. Quelle und Ziel sollten eigentlich Schwesterknoten sein, ich muss am Mo nochmal schauen, aber es sah heute korrekt aus. Aber stimmt, eine Endlosschleife würde diesen Speicherüberlauf erklären. Danke für den Tip!

JPSelter 27. Jun 2006 08:39

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
So, da bin ich wieder. Es ist etwas seltsam mit diesem Fehler. Also erstmal skizziere ich die Baumstruktur:

Delphi-Quellcode:
+ A (Quelle)
  - B
  - C
- D
+ E
  - F
- G (Ziel, hier sollen alle Children von A dran)
Ich will einen neuen Knoten einfügen. Zum Zeitpunkt meines CopyTo hängt der neue Knoten G bereits im Baum. Dann folgt

Delphi-Quellcode:
Form1.VST1.CopyTo(Node,currentNode,amInsertAfter,false);
Node ist der Quellknoten (geprüft) und currentNode der Zielknoten (geprüft). Trotzdem kommt die Fehlermeldung, als wenn, wie schon vermutet, irgendwo eine Endlosschleife läuft. Aber die kann ich nirgends sehen.
Dann habe ich mal aus true ein false gemacht, also ChildrenOnly disabled. Das klappt, aber mit seltsamen Endergebnis:

Delphi-Quellcode:
+ A (Quelle)
  - B
  - C
- D
+ E
  - F
+ A (Kopie der Quelle)
  - B
  - C
+ G (eigentliches Ziel)
Er hat zuerst Knoten G korrekt als Ziel erkannt, macht aber eine Kopie von A und hängt diesen an nil an. Aber wieso? Jetzt verstehe ich gar nichts mehr :(

Hawkeye219 27. Jun 2006 09:16

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Hallo JPSelter

Zitat:

Zitat von TreeView-Hilfe
Code:
TVTNodeAttachMode = (
    amNoWhere,       // just for simplified tests, means to ignore the Add/Insert command
    amInsertBefore,  // insert node just before destination (as sibling of destination)
    amInsertAfter,   // insert node just after destionation (as sibling of destination)
    amAddChildFirst, // add node as first child of destination
    amAddChildLast   // add node as last child of destination
  );

Versuche es einmal mit dem Modus amAddChildLast. Wenn du nur die Kind-Knoten kopieren möchtest, mußt du dies eventuell in einer Schleife tun.

Gruß Hawkeye

JPSelter 27. Jun 2006 09:24

Re: VirtualTreeView: Kompletten Subtree kopieren?
 
Danke Hawkeye! Dein Tip war nicht die Lösung, aber Dein Posting hat mir das Problem direkt vor Augen geführt: Mein amInsertAfter hängt den Quellknoten nicht an mein Target an, sondern versucht einen neuen Knoten NEBEN meinem Zielknoten zu erstellen. Und wenn ChildrenOnly dann true ist, hat er nichts, wohin er es hängen könnte :D Habe nun amAddChildFirst benutzt und das klingt jetzt auch logisch ;)


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