Einzelnen Beitrag anzeigen

Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Treeview selected Node einfärben

  Alt 4. Feb 2014, 22:50
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ß
Volker Zeller
  Mit Zitat antworten Zitat