AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Große Probleme mit VirtualStringTree
Thema durchsuchen
Ansicht
Themen-Optionen

Große Probleme mit VirtualStringTree

Ein Thema von SneakyBagels · begonnen am 17. Jun 2017 · letzter Beitrag vom 19. Jun 2017
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#1

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 17:57
Das siehst Du schon richtig, machst es Dir aber auch unnötig schwer. Ich an Deiner Stelle würde die Objekte speichertechnisch weiterhin von der Objektliste verwalten lassen und eine Referenz in den Knoten ablegen, wie Du es ja vorher hattest. Wird nun ein Knoten gelöscht, merkst Du Dir die Referenz, holst Dir deren Index aus der Objektliste und löschst dann diesen Index aus der Liste. Steht dort OwnsObjects auf true, wird das Objekt automatisch freigegeben. Im OnFreeNode darfst Du das Objekt dann natürlich nicht freigeben, das ist ja schon weg.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:00
Das ich das Projekt nochmal als Anhang schicken? Verstehe sonst nur Bahnhof, ob ich das jetzt richtig habe oder nicht.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:12
Du könntest einfach das OnFreeNode Event weglassen. Dann gibt dir der Tree auch nichts frei was du nicht freigeben willst. Und dann eben eine TObjectList nutzen (wie von DeddyH vorgeschlagen). Bei mir funktioniert das so schon seit Jahren.

Der Tree bekommt immer nur eine Referenz zu dem Objekt, wird aber niemals der Besitzer.

EDIT: Häng dein Projekt einfach mal an. Dann können wir mal drüberschauen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:12
Das müssen sich dann aber andere anschauen, ich sitze gerade am Tablet. Aber eine andere Frage: wird die Liste noch anderweitig benutzt, oder dient sie lediglich der Speicherverwaltung? Im letzteren Fall könntest Du doch komplett darauf verzichten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#5

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:25
Aktuell verwende ich ein TListView welches ich eigentlich bearbeiten wollte, um Data mit hinterlegter Liste zu verwenden.
Das hätte für mich den Vorteil, dass ich an verschiedenen Stellen nicht mehr extra in meine Ini-Datei gehen muss oder noch blöder die SubItems auslesen muss.

Und wenn-schon-denn-schon dachte ich mir, baue ich alles komplett auf VST um.
Also ja, die Daten werden noch woanders verwendet (nur lesend).

Hier meine aktuelle Demo. Sortieren funktioniert, aber löschen danach nicht mehr.
Folgendes lößt das Problem vorzeitig, aber ist es auch -richtig-?
Delphi-Quellcode:
 // Zu TVSTData hinzufügen
 Index: Integer;

 // Index beim Erstellen der Nodes setzen
 aVSTData := TVSTData.Create;
 aVSTData.Index := i;
 // ....

 // Einen Node und dessen Daten löschen
 ShowMessage('VST-Index: ' + IntToStr(VST.FocusedNode.Index) + sLineBreak + 'List-Index: ' + IntToStr(Data.Index));
 aVSTDataClasses.Delete(Data.Index); // Daten des Nodes aus ObjectList löschen
 VST.DeleteNode(VST.FocusedNode); // Node "visuell" löschen
Angehängte Dateien
Dateityp: zip VST-Test.zip (2,8 KB, 6x aufgerufen)

Geändert von SneakyBagels (17. Jun 2017 um 18:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:38
Nimm doch beim Löschen einfach den Index innerhalb der Objektliste, dann kann doch nichts schiefgehen. Pseudo-Code:
Delphi-Quellcode:
idx := Liste.IndexOf(VST.NodeData);
if idx > -1 then
  Liste.Delete(idx);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 23:10
Ich habe mir dein Testprojekt jetzt mal angeschaut. Es ist natürlich wenig programmfluss drin der sich selbst erklärt. Also wann soll man welchen Button drücken damit nichts kaputt geht. Aber das ist ja bei einem Testprojekt normal.

Prinzipiell sieht es schonmal nicht falsch aus. Auch wenn da noch einige Dinge drin sind die man verbessern könnte. Nur will ich hier jetzt kein großes Fass aufmachen da ich nicht weiß, wie ausführlich du dein Testprojekt jetzt programmiert hast.

Ich denke es wäre sinnvoller, wenn du schon ein etwas fortgeschritteneres Programm zum "Probelesen" anbieten würdest, in dem du auch schon ein gewisses Errorhandling drin hast. Fehler im Keim zu ersticken ist zwar immer besser, aber bei reinen Testanwendung schreibt man ja auch schnell mal was hin ohne großartig Wert darauf zu legen wie es aussieht. Hauptsache der Test funktioniert.

Das Problem mit dem Löschen deiner Nodes haben wir ja in dem anderen Thread geklärt.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#8

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 23:13
Ich kann dir später gerne mal mein aktuelles Testprojekt hier anbieten.
Es wird aber noch über Wochen ein Testprojekt bleiben.
Fehlerbehandlung kommt erst, wenn ich den Testcode in mein eigentliches Projekt einbaue, da mir im Testprojekt dafür gewisse Units fehlen.

Mit diesem Testprojekt ohne Fehlerbehandlung komme ich vollkommen klar. Ich setze es demnächst aber nochmal neu hier rein mit einer kurzen Erklärung.
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:50 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-2025 by Thomas Breitkreuz