AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein VirtualStringTree und Klasseninstanzen - Node Data finden

VirtualStringTree und Klasseninstanzen - Node Data finden

Ein Thema von günni0 · begonnen am 16. Apr 2018 · letzter Beitrag vom 17. Apr 2018
Antwort Antwort
günni0
(Gast)

n/a Beiträge
 
#1

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 09:09
Das ist nicht so einfach. Aber ich sehe schon, das ich die Referenz auf Node gar nicht weglassen kann.
Wenn ich einen Eintrag aus meiner ObjectList lösche, werden zwar die Daten gelöscht, aber nicht der dazugehörige "Node" selber im VST.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 09:11
Das ist nicht so einfach. Aber ich sehe schon, das ich die Referenz auf Node gar nicht weglassen kann.
Wenn ich einen Eintrag aus meiner ObjectList lösche, werden zwar die Daten gelöscht, aber nicht der dazugehörige "Node" selber im VST.
Doch, das ist ganz einfach mit dem Beispielprojekt. Man muss es nur machen! Ein TUserData mit zwei Properties, ein VST und dann noch zwei, drei Buttons und ein, zwei Editfelder.

Nach aktualisieren bzw. ändern der Objekte in der Objektliste machst du einfach ein VST.Clear und neu hinzufügen.
So hast du immer einen konsistenten Stand.
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#3

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 09:14
Wenn ich VST.Clear aufrufe, lösche ich aber auch alle meine Klasseninstanzen.
Das war ja genau das was ich wollte: lösche ich einen Node, löscht er die Klasseninstanz die dranhängt direkt mit.

Immer das ganze VST löschen und neuladen war auch genau das, was ich vermeiden wollte mit den Daten die ich im Hintergrund halte.

Geändert von günni0 (17. Apr 2018 um 09:20 Uhr)
  Mit Zitat antworten Zitat
Aviator

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

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 09:39
Warum löscht er deine Instanz? Das kann nur der Fall sein, wenn du OnFreeNode implementiert hast. Das solltest du nicht machen wenn deine Instanzen von der ObjectList verwaltet werden.

EDIT: Du musst natürlich auch aufpassen, dass deine Instanz so lange existiert, wie es eine Node im VST gibt die darauf zugreift. Ansonsten hagelt es AVs.

Das bedeutet im Umkehrschluss: Erst die Nodes im VST löschen, dann die Instanz aus der ObjectList werfen und die Nodes wieder erzeugen.
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#5

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 09:46
Ich mache gerade ein Beispiel. 10 Minuten noch.

So ganz klappt es noch nicht. Speziell wenn man erst den Button Node mit Idx 2 löschen drückt und dann Node Peter Wurst löschen.

Mein Ziel wäre es, die Referenz auf Node wegzubekommen und die Möglichkeit zu haben, das wenn ich eine Klasseninstanz lösche, auch gleich der Node mit weg ist.
Aktuell ist es ja so, dass ich den Node löschen muss. Und das geht nur mit einer Referenz da drauf. Aber ihr seht, mein Code ist wie Pasta ... nix funktioniert.
Angehängte Dateien
Dateityp: zip VST.zip (2,2 KB, 4x aufgerufen)

Geändert von günni0 (17. Apr 2018 um 09:58 Uhr)
  Mit Zitat antworten Zitat
Aviator

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

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 10:09
Das nächste Mal bitte als Projekt

Mach mal folgendes, aber bedenke, dass das jetzt nur eine Lösung für deine Vorgehensweise hier ist. Und bitte alles beachten. Ich hänge bewusst die Datei nicht an, damit du die Änderungen auch selbst einbauen musst und hoffentlich auch verstehst:

Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
begin
 VST.Clear;
 DeleteNode(2); // Daten anhand des Index löschen. 2 ist nicht der absolute Index sondern der, der in Button1Click gesetzt wird
 VST.RootNodeCount := aVSTDataClasses.Count;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  VST.Clear;
  DeleteNode('Peter Wurst'); // Daten anhand eines Nutzernamens löschen
  VST.RootNodeCount := aVSTDataClasses.Count;
end;
Delphi-Quellcode:
procedure DeleteNode(iIndex: Integer); overload;
//var
// Node: PVirtualNode;
begin
  aVSTDataClasses.Delete(iIndex);

// Node := FindUserNodeByIndex(iIndex);
// if Assigned(Node) then
// Form2.VST.DeleteNode(Node);
end;
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
 Column: TVirtualTreeColumn;
 i: Byte;
begin
 ReportMemoryLeaksOnShutdown := True;
 
 ...

 VST.OnInitNode := VSTInitNode;
// VST.OnFreeNode := VSTFreeNode; // <--- WICHTIG! ENTFERNEN!
 VST.OnGetText := VSTGetText;
end;
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#7

AW: VirtualStringTree und Klasseninstanzen - Node Data finden

  Alt 17. Apr 2018, 10:18
Ok Moment ganz langsam für meinen alten Kopf.
Heißt das jetzt, dass du mit 2, 3 Zeilen Umstellung das so gemacht hast, dass man jetzt eine Klasseninstanz löscht, das Node verschwindet (man löscht ja alle mit Clear) und alles neugezeichnet wird?
Wird das Neuzeichnen durch das Setzen von RootNodeCount ausgelöst?

Das ist dann ja genau das was TiGü meinte, nur habe ich es leider nicht ganz verstanden.

Geändert von günni0 (17. Apr 2018 um 10:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:23 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