Einzelnen Beitrag anzeigen

Aviator

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

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