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?