Hallo,
ich möchte den einzelnen TreeNodes abhängig von dem TreeNode.data Object Icons zuweisen/ bzw. anzeigen lassen.
Dazu müsste doch das Ereignis: OnCustomDrawItems geeignet sein.
Delphi-Quellcode:
procedure TpwrManager.pmTreeCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
decorateNode(Node, Node.Data);
end;
Dem TreeView ist eine ImageList zugeordnet.
Delphi-Quellcode:
procedure TPwrManager.decorateNode(node: TTreeNode; data: TObject);
var
deviceType: TDeviceType;
begin
if data is TDevice then
begin
deviceType := (data as TDevice).deviceType;
if assigned(deviceType) then
begin
case deviceType.typeClass of
a: begin
node.ImageIndex := ord(tiClassA_unknown);
end;
b: begin
node.ImageIndex := ord(tiClassB_unknown);
end;
end;
case (data as TDevice).powerState of
true: node.ImageIndex := node.ImageIndex -2;
false: node.ImageIndex := node.ImageIndex -1;
end;
end
node.ExpandedImageIndex := node.ImageIndex;
node.SelectedIndex := node.ImageIndex;
end;
end;
Der Tree wird gezeichnet wie geplant.
Nur wenn ich Elemente des Trees aufklappe oder den gesamten Tree Expandiere.
Dann läuft die CPU auf 100%.
Das Programm beschäftigt sich dann nur noch mit dem Neuzeichnen.
Habe ich da einen dicken Denkfehler oder etwas übersehen?
Oder ist das die falsche Herangehenweise und ich sollte
den Node gleich bei der Erstellung das richtige Bild zuweisen?
Aber wie mache es dann wenn sich der "Status" des Nodes (bzw. des Objects dahinter)
geändert hat und ich das durch ein anderes Bild visualisieren möchte?
Grüße
Klaus