AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit VirtualStringTree

Ein Thema von stifflersmom · begonnen am 8. Nov 2017 · letzter Beitrag vom 9. Nov 2017
Antwort Antwort
Aviator

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

AW: Problem mit VirtualStringTree

  Alt 8. Nov 2017, 16:39
Hi,

habe mir deinen SourceCode jetzt mal angeschaut. Ich muss leider sagen, dass diverse Teile doch sehr "schwierig" programmiert sind. Hiermit meine ich den Auszug aus deinem ersten Post und die Methode AddVSTStructure.

Aber ok. Das kann man ja verbessern und ausbauen.

Hier mal ein Knackpunkt, der aber bestimmt nicht die Lösung deines Problems sein wird:

Delphi-Quellcode:
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
  ARecord: TArtikelTecDocrec): PVirtualNode;
var
  Data: PArtikelTecDocrec;
  level: Integer;
begin

  Result := AVST.AddChild(ANode);
  Data := AVST.GetNodeData(Result);
  if Level = 0 then
    Result.CheckType := ctNone;
  Avst.ValidateNode(Result, False);
In diesem Ausschnitt prüfst du auf die lokale Variable Level die aber nicht initialisiert ist. Also kannst du Glück haben, dass da eine 0 drin steht oder aber auch nicht. Prüfe besser mit der VST Funktion GetNodeLevel(Node) . Da bekommst du dann den Level der Node her. Später kannst du dann das alles nur noch anhand deiner Daten ableiten und den Tree nur noch zur Anzeige nutzen.

Dann hast du in dem ersten Codeabschnitt noch den Fall, dass du folgendes ausführst:

Delphi-Quellcode:
  // Fahrzeugvariation
  ArtikelTecDocRec.level :=2; // Hier setzt du den Level des neuen Data Records auf 2

  Node.checkType := ctCheckBox; // An dieser Stelle wird der CheckType der Node gesetzt. Allerdings ist hier die Node noch die Node auf dem ersten Level. Daher wird auch auf Level 1 eine CheckBox dargestellt

  AddVSTStructure(VS_TD, Node, ArtikelTecDocRec); // Und erst hier wird die neue Node auf Level 2 erstellt

Aus dem Screenshot kommt das nicht so deutlich raus. Aber wäre es möglich, dass die Spalte einfach nicht breit genug ist und daher die CheckBox irgendwie übermalt wird? Es steht ja auch noch "Node" davor. Das sieht für mich so aus, als das du toAutoSpan in den TreeOptions eingeschaltet hättest und im OnGetText die Column 0 und/oder Column 1 der Node auf Level 2 nicht oder nicht richtig behandelst.


Hast du denn mal Schritt für Schritt gedebuggt oder auch mal Teile des SourceCodes auskommentiert um Schritt für Schritt vorzugehen?
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
383 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Problem mit VirtualStringTree

  Alt 8. Nov 2017, 17:29
Hi,

Delphi-Quellcode:
  // Fahrzeugvariation
  ArtikelTecDocRec.level :=2; // Hier setzt du den Level des neuen Data Records auf 2

  Node.checkType := ctCheckBox; // An dieser Stelle wird der CheckType der Node gesetzt. Allerdings ist hier die Node noch die Node auf dem ersten Level. Daher wird auch auf Level 1 eine CheckBox dargestellt

  AddVSTStructure(VS_TD, Node, ArtikelTecDocRec); // Und erst hier wird die neue Node auf Level 2 erstellt
Uupps, ja, das könnte es sein. Da bin ich gedanklich auch ganz falsch davor, das werde ich mir morgen früh noch mal genau ansehen.
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
383 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Problem mit VirtualStringTree

  Alt 9. Nov 2017, 07:19
Jo, das war's tatsächlich. da war ich tatsächlich von einer falschen Reihenfolge ausgegangen, jetzt passt das aber.
Den checkType setze ich jetzt direkt in der Funktion AddVstStructure und bin dann auch "save" das richtige Level erwischt zu haben.
Was den Code generell angeht, gebe ich dir Recht, der ist hier so nebenbei mit Copy&Paste aus anderen Teilen zusammengepanscht worden, aber er wird eh nciht überleben, den baue ich jetzt einmal komplett neu auf.

Vielen Dank
  Mit Zitat antworten Zitat
Aviator

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

AW: Problem mit VirtualStringTree

  Alt 9. Nov 2017, 08:37
Wenn du deinen SourceCode sowieso überarbeiten willst, dann solltest du davon ausgehend deine Daten auch nur noch in einer ObjectList oder in Array of Records speichern und diese zur Auswertung nutzen. Der Tree sollte nur zur Anzeige von den in der Liste stehenden Daten verwendet werden.

Zudem würde ich von der AddChild() Methode weg zu RootNodeCount und den InitNode() und InitChildren() Events hingehen. Das wäre dann der optimalere Fall für die Verwendung des VST.

Leider wird das in den Advanced Demos des VST nicht oder nur sehr wenig behandelt (Stand vor ca. 2 Jahren). Ich meine aber, dass ich hier irgendwo mal eine Beispielanwendung hochgeladen habe in der das gut erklärt war. Aber es ist auch kein Hexenwerk. Das findest du wahrscheinlich auch selbst raus.

Aber schön das ich dir helfen konnte und du den Fehler beseitigt hast.
  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 18:35 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