![]() |
VirtualTreeView bearbeiten
Hallo,
ich habe folgendes Problem: Ich habe ein Programm geschrieben, welches eine URL aus einer Stringlist und den Dateinamen aus einer weiteren Stringlist ausliest (wobei der Dateiname auch in dem VirtualTreeView steht) und diese Dateien in einem Thread herunterlädt. Das funktioniert auch alles ohne Probleme. Jetzt würde ich gerne in der VirtualTreeView Komponente in derselben Zeile wie der jeweilige Eintrag steht eine Progressbar, sowie die aktuelle Geschwindigkeit, Verbleibende Zeit und Größe der Datei bzw. der bereits heruntergeladenen Datei anzeigen lassen. Die Werte an sich hab ich alle schon, ich muss sie nur irgendwie in diese Komponente schreiben können. Momentan hab ich es so probiert:
Delphi-Quellcode:
Jedoch erhalte ich hier in der 3. Zeile eine Zugriffsverletzung.
[...]
daten := TEntry.Create; VST.NodeDataSize:=SizeOf(daten); daten := TEntries(VST.GetNodeData(Node)^); with daten do begin daten.DownloadStatus:=inttostr(Progress)+ ' %'; end; [...] Wobei wenn ich recht überlege dass so auch gar nicht funktionieren könnte, da man in dieser Routine ja wissen müsste welche Zeile jz was ist... :nixweiss: Hat jemand eine Idee wie sich dieses Problem lösen lässt? Wie bereits in einem anderen Thema über die Komponente gesagt, gibt es eigentlich keinen vernünftigen Tutorials oder ähnliches... Meine erste Idee war
Delphi-Quellcode:
jedoch weiß ich nicht wie ich an die x / y Werte kommen soll :|
node := VST.GetNodeAt(x,y);
Wäre nett wenn mir jemand helfen kann :) (Crosspost DF: ![]() |
AW: VirtualTreeView bearbeiten
Wenn ich dich richtig verstanden habe hast du einen bereits initialisierten Tree und möchtest nun beliebige Einträge durch ein Programm ändern lassen.
Ich hab zwar lange nicht mehr mit VST gearbeitet, aber theoretisch sollte es möglich sein, diesen von oben bis unten per Schleife durchzugehen und, beispielsweise über die URL, den passenden Eintrag zu finden. Laut der Doku unter ![]() Mir hat damals ![]() |
AW: VirtualTreeView bearbeiten
"Normalerweise" geht das so:
Der Thread stellt eine Änderung im Fortschritt fest. Also will er den Daten des dazugehörigen Knoten das sagen (entweder kennt der Thread den Knoten oder der Knoten den Thread). Dann holt man sich die Daten des Knotens und ändert darin die Variable, die den Fortschritt speichert. Wenn dann irgendwann (vielleicht durch ein Tree.Repaint) das OnGetText-Event aufgerufen wird, gibt man den Fortschritt zurück und der User sieht ihn. |
AW: VirtualTreeView bearbeiten
Zitat:
How can I do this? :D |
AW: VirtualTreeView bearbeiten
TV.GetNodeData(Node) :-)
Ich denke dein Problem ist die Verknüpfung zwischen Thread und Knoten. Oder? |
AW: VirtualTreeView bearbeiten
Zitat:
|
AW: VirtualTreeView bearbeiten
Zitat:
Zum Beispiel müsste ich aus der Zeile eine Spalte die Unique ist auslesen und anhand dessen Rückgabe die aktuelle Zeile verändern lassen ;) Ich dachte dabei einfach daran z.B den aktuellen Timestamp mit in die Tabelle zu schreiben und dann im Thread auszulesen (anhand der ID in der Stringlist und dessen vergleich) und dann sozusagen machen node := 3; oder so ähnlich, wobei das eigentlich das Problem ist, wie ich node zuweisen kann auf eine bestimmte Zeile :) |
AW: VirtualTreeView bearbeiten
Grundsätzlich hat Stevie Recht. Aber bis wir auf dem Niveau sind, "krauten" wir einfach mal so weiter. :-)
Wenn ich dich richtig verstanden habe, hast du doch eine Klasse TEntry. Nun gibt es 2 Varianten:
Ich finde Variante 2 kommt deinen Bedürfnissen ziemlich nahe. |
AW: VirtualTreeView bearbeiten
Zitat:
|
AW: VirtualTreeView bearbeiten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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 by Thomas Breitkreuz