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
Seite 2 von 4     12 34      
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 12:27
Was hast du denn für eine Delphiversion und woher hast du den VST heruntergeladen?
Richtig wäre hier ausgecheckt:
https://github.com/Virtual-TreeView/Virtual-TreeView
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#12

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 12:32
Tokyo und VST Version 7, die neueste.
Fehlt in Unit2 nicht SetData und GetData?
Angehängte Dateien
Dateityp: zip VST-Test.zip (2,2 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#13

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 12:35
Tokyo und VST Version 7, die neueste.
Fehlt in Unit2 nicht SetData und GetData?

EDIT es funktioniert jetzt... ich musste nur meinen alten VST-Ordner mit den Units drin löschen.
Ich bastel dann später mal weiter. Danke bisher! Und Aviator, deinen Beitrag lese ich mir noch in Ruhe durch.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#14

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 16:27
So da bin ich wieder.
Ich habe noch ein bisschen rumgespielt und herausgefunden, dass wenn ich das VST mit Clear leere, wohl auch die Datenklassen in den Nodes automatisch freigegeben werden.
Ein im ..ObjectList..Free im FormDestroy führt aber zu einem "Ungültige Zeigeroperation".
Im VSTOnFree habe ich VST.GetNodeData<TVSTData>(Node).Free; hinzugefügt.
Ist es nicht normaler so, wie man Instanzen von etwas freigibt? Im OnDestroy meine ich?

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

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

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:35
Das klingt so, als hättest Du Mehrfach-Referenzen auf Deine Objekte. Wenn man da nicht aufpasst, schafft man sich ganz schnell wilde Zeiger, was zu den geschilderten Problemen führt. Also entweder dafür sorgen, dass beim Zerstören der Objekte alle Referenzen genilt werden oder einfach Interfaces verwenden.
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
 
#16

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18:48
Wollte gerade antworten

1. TObjectList habe ich durch TList ausgetauscht. Denn TObjectList UND die VST haben die Objekte.... "ge-owned" gehabt... glaube ich jedenfalls.

2. Folgende Änderung im OnFreeNode
Delphi-Quellcode:
procedure TForm2.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
begin
 VST.GetNodeData<TVSTData>(Node).Free;
 aVSTDataClasses.Delete(Node.Index); // <== das hier habe ich hinzugefügt
end;
Das funktioniert jetzt soweit.

- VST.Clear
VST leeren, Nodes löschen und TList-Objekte freigeben

- aVSTDataClasses.Free
Am Ende des Programms Liste freigeben

NUR ich kann mir gut vorstellen, dass meine Änderung oben mit Delete(Nodex.Index) richtig in die Hose geht, wenn man das VST um-sortiert (von Z nach A statt A nach Z).
Bzw. wenn man im VST nur ein paar Nodes und nicht alle angezeigt (Stichwort "Suche") dann ginge das auch echt in die Hose.
Oder sehe ich das falsch?

Und habe dabei gerade noch ein anderes Problem gefunden... ein VST.Clear räumt mir leider auch die TList leer, was ich nicht möchte.

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

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

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 18: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
 
#18

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 19: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
 
#19

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 19: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.625 Beiträge
 
Delphi 12 Athens
 
#20

AW: Große Probleme mit VirtualStringTree

  Alt 17. Jun 2017, 19: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
Antwort Antwort
Seite 2 von 4     12 34      


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 12:55 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