Wie kann ich in einer alten Version von VirtualStringTree die Node.Data in InitNode setzen für ein TObject setzen?
Die bevorzugte Methode für die Befüllung einer Liste ist der Event
OnInitNode und die Zuweisung an
RootNodeCount. Das sieht dann wie folgt aus:
Delphi-Quellcode:
type
PNodeData = ^TNodeData;
TNodeData = record
nodeData: TMeinObject;
nodeColor: TColor;
end;
.DoInitNode(pmSender: TBaseVirtualTree; pmParentNode, pmNode: PVirtualNode; var pmvInitialStates: TVirtualNodeInitStates);
var
data: PNodeData;
begin
data := pmSender.GetNodeData(pmNode);
if data <> Nil then
begin
data.nodeData := dataList.Items[pmNode.Index];
data.nodeColor := ...
end;
end;
vst.OnInitNode := DoInitNode;
vst.NodeDataSize := SizeOf(TNodeData);
vst.RootNodeCount := dataList.Count;
Wenn du mehr Einfluss haben willst, z.B. weil deine angezeigten Daten Zwischenberechnungen enthalten, kannst du es auch so erledigen:
Delphi-Quellcode:
var
run: PVirtualNode;
data: PNodeData;
begin
vst.RootNodeCount := dataList.Count;
vst.BeginUpdate;
try
run := vst.GetFirst;
while run <> Nil do
begin
data := vst.GetNodeData(run);
if data <> Nil then
begin
data.nodeData := dataList.Items[run.Index];
data.nodeColor := ...
end;
run := vst.GetNextSibling(run);
end;
finally
vst.EndUpdate;
end;
Bis bald...
Thomas