AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Nodes einer VirtualStringTree hinzufügen - aber schneller!
Thema durchsuchen
Ansicht
Themen-Optionen

Nodes einer VirtualStringTree hinzufügen - aber schneller!

Ein Thema von Jim Carrey · begonnen am 5. Okt 2016 · letzter Beitrag vom 6. Okt 2016
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 14:26
Den präzisen Speicherverbrauch einer Anwendung zu messen ist nicht trivial. Der Taskmanager ist hierfür kein besonders gutes Werkzeug, da er nur einen groben Wert widerspiegelt. Es ist bei der Speicherverwaltung von Windows (und auch anderen Betriebssystemen) durchaus möglich, dass ein Speicherbereich intern als "frei" gekennzeichnet wird, dem Prozess aber weiterhin zugeordnet wird, da die Wahrscheinlichkeit, dass dieser wieder Speicher brauchen wird i.A. recht hoch ist.

Du kämpfst an vielen Fronten gleichzeitig. Baue Dir ein kleines Beispiel und mache Dir daran die Speicherverwaltung des TreeViews klar - dann übertrage das auf andere Lösungen. Lasse Dich aber nicht von Seiteneffekten wie der Speicheranzeige des Taskmanagers verwirren.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#2

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 14:38
@Aviator ja es funktioniert jetzt.
Nur was mir jetzt erst aufgefallen ist > meine CheckBoxen im VirtualStringTree sind verschwunden.
Ich weiß gerade nicht ob es am Update von VST liegt oder nicht. Muss ich prüfen.

Daniel:
das habe ich zum Glück bereits gemacht. Ich habe alles was das VST angeht aus dem Projekt kopiert und in eine saubere kleine Spiele-Wiese-Anwendung gepackt.
  Mit Zitat antworten Zitat
Aviator

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

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 14:48
@Aviator ja es funktioniert jetzt.
Super!
meine CheckBoxen im VirtualStringTree sind verschwunden.
Welche Checkboxen?

Möglicherweise wurde seit deiner letzten Version in den TreeOptions etwas verändert und du musst noch einen zusätzlichen Haken setzen. Ich gehe mal davon aus, dass du die Checkboxen vor den Nodes meinst mit denen du diese auswählen kannst.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#4

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 14:49
Ein VirtualStringTree hat doch einen Support für Checkboxen, wusstest du das nicht?

Edit: verdammt, die CheckBoxen sind auch mit der alten Version von VST nicht mehr da. Muss wahrscheinlich an was anderem liegen

Edit 2: ein bisschen Nachdenken hätte nicht geschadet!
Die Knoten werden ja jetzt erst bie der Anzeige initialisiert wenn ich das richtig verstanden habe.
Demnach musste Folgendes zusätzlich in InitNode
Delphi-Quellcode:
procedure TForm2.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
 Data: PMyDataClass;
begin
 Data := VST.GetNodeData(Node);

 // .... dem VST natürlich auch sagen, dass er die verflicksten Dinger anzeigen soll!
 Node.CheckType := ctCheckBox;
 Node.CheckState := csCheckedNormal;

 Data^ := FMyDataClasses[Node^.Index];
end;

Geändert von Jim Carrey ( 6. Okt 2016 um 15:01 Uhr)
  Mit Zitat antworten Zitat
Aviator

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

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 15:09
Ein VirtualStringTree hat doch einen Support für Checkboxen, wusstest du das nicht?

Edit: verdammt, die CheckBoxen sind auch mit der alten Version von VST nicht mehr da. Muss wahrscheinlich an was anderem liegen

Edit 2: ein bisschen Nachdenken hätte nicht geschadet!
Die Knoten werden ja jetzt erst bie der Anzeige initialisiert wenn ich das richtig verstanden habe.
Demnach musste Folgendes zusätzlich in InitNode
Delphi-Quellcode:
procedure TForm2.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
 Data: PMyDataClass;
begin
 Data := VST.GetNodeData(Node);

 // .... dem VST natürlich auch sagen, dass er die verflicksten Dinger anzeigen soll!
 Node.CheckType := ctCheckBox;
 Node.CheckState := csCheckedNormal;

 Data^ := FMyDataClasses[Node^.Index];
end;
Doch klar wusste ich das.
Ohne mich jetzt größer darzustellen als ich bin, aber ich glaube es gibt keine Funktion des VST die ich nicht kenne. Ich arbeite mittlerweile schon seit einigen Jahren mit der Komponente und habe schon sehr viele Werke damit vollbracht.

Und ja: Mit dem setzen des CheckTypes und des CheckStates liegst du richtig. Das musst du jetzt (wie vorher auch) jeder Node einzeln zuordnen. Ich dachte nur (siehe meinen letzten Beitrag), dass du eventuell den CheckSupport in den TreeOptions nicht eingeschaltet hattest oder sogar eine neue Einstellung hinzugekommen ist seit deiner letzten Version. Weil dann wird nämlich auch nix angezeigt.

Aber du hast es ja jetzt gefunden.

Happy
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#6

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 15:18
Aber zur Theorie.. woran könnte es gelegen haben, dass der Speicher vorher nicht wieder freigegeben wurde obwohl doch die Knoten mit .Free alle einzeln aufgerufen wurden?
Ich habe sogar zum Test beim Hinzufügen der Knoten jeden einzelnen validieren lassen aber auch das half nichts.
  Mit Zitat antworten Zitat
Aviator

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

AW: Nodes einer VirtualStringTree hinzufügen - aber schneller!

  Alt 6. Okt 2016, 15:25
Aber zur Theorie.. woran könnte es gelegen haben, dass der Speicher vorher nicht wieder freigegeben wurde obwohl doch die Knoten mit .Free alle einzeln aufgerufen wurden?
Ich habe sogar zum Test beim Hinzufügen der Knoten jeden einzelnen validieren lassen aber auch das half nichts.
Ohne SourceCode ist das reine Spekulation. Wenn du den noch hast, dann stell ihn mal hier rein. Bei Gelegenheit schau ich (oder die anderen) dann mal drüber. Wird ja nichts extrem kompliziertes sein denke ich.

Die andere Frage wäre jetzt, ob das nicht egal ist. Es läuft ja jetzt. ReportMemoryLeaksOnShutdown gibt dir auch keine Meldung aus? Wenn nicht, dann ist alles gut.

Und beachte auch noch Post #36 von Daniel bzgl. des Speicherverbrauchs einer Anwendung. Wenn du da genaueres wissen willst, dann solltest du dir evtl. den ProcessMonitor anschauen. Der müsste das genauer darstellen. Aber da ist jaenicke der Profi drin. Mit dem kenne ich mich nicht so gut aus.
  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 17:15 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