Hallo,
Zitat:
Ich möchte den selktierten Knoten beginnend vom Hauptknoten bis zu all seinen Childknoten einfärben?
Ich weiß jetzt nicht, ob ich Dein Anliegen richtig verstanden habe, aber ich versuche es mal.
Zitat:
ehrlich gesagt, ich hab keinen blassen Schimmer, wie ich das anstellen soll.
Um das Selektieren mehrerer Knoten zu ermöglichen, müssen die Eigenschaften MultiSelect und MultiSelectStyle der Treeview entsprechend gesetzt werden (dadurch kann aber auch der User mehrere Konten selektieren!).
Dann noch die gewünschten Knoten selektieren, fertig; Leider geht es nicht so einfach über:
Node.Selected := True;
, aber ein
Node.TreeView.Select (Node, [ssCtrl, ssShift]);
tut es.
In Code gegossen könnte das so gehen:
1. Variante (der User hat die Möglichkeit mehrere Knoten per Maus zu selektieren):
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
TreeView1.MultiSelect := True;
TreeView1.MultiSelectStyle := [msControlSelect, msShiftSelect]
end;
procedure TForm3.TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure SelectAllNodes (Node : TTreeNode);
begin
while Assigned (Node) do
begin
Node.TreeView.Select (Node, [ssCtrl, ssShift]);
SelectAllNodes (Node.getFirstChild);
Node := Node.getNextSibling
end
end;
begin
if not Assigned (Node.Parent) then
begin
Node.Expand (True);
SelectAllNodes (Node.getFirstChild)
end
end;
2. Variante (der User hat kein Möglichkeit mehrere Knoten per Maus zu selektieren, wenn ich nix übersehen habe):
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
begin
TreeView1.MultiSelect := True
end;
procedure TForm3.TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure SelectAllNodes (Node : TTreeNode);
begin
while Assigned (Node) do
begin
Node.TreeView.Select (Node, [ssCtrl, ssShift]);
SelectAllNodes (Node.getFirstChild);
Node := Node.getNextSibling
end
end;
begin
if not Assigned (Node.Parent) then
try
TreeView1.MultiSelectStyle := [msControlSelect, msShiftSelect];
Node.Expand (True);
SelectAllNodes (Node.getFirstChild)
finally
TreeView1.MultiSelectStyle := []
end
end;
Vielleicht hilft es weiter.
Gruß