![]() |
Treeview selected Node einfärben
Hallo,
ehrlich gesagt, ich hab keinen blassen Schimmer, wie ich das anstellen soll. Ich möchte den selktierten Knoten beginnend vom Hauptknoten bis zu all seinen Childknoten einfärben? Beispiel: root1 child1 unterchild1 unterchild2 child2 root2 \ child1 \ unterchild1 / child2 / wenn ich auf einen Eintrag in root2 klicke, soll root2 komplett eingefärbt werden, damit es sich von den anderen Einträgen abhebt. Danke Josef |
AW: Treeview selected Node einfärben
Hallo,
Zitat:
Zitat:
Dann noch die gewünschten Knoten selektieren, fertig; Leider geht es nicht so einfach über:
Delphi-Quellcode:
, aber ein
Node.Selected := True;
Delphi-Quellcode:
tut es.
Node.TreeView.Select (Node, [ssCtrl, ssShift]);
In Code gegossen könnte das so gehen: 1. Variante (der User hat die Möglichkeit mehrere Knoten per Maus zu selektieren):
Delphi-Quellcode:
2. Variante (der User hat kein Möglichkeit mehrere Knoten per Maus zu selektieren, wenn ich nix übersehen habe):
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;
Delphi-Quellcode:
Vielleicht hilft es weiter.
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; Gruß |
AW: Treeview selected Node einfärben
Hallo,
danke für die Antwort. Blöd, ich dachte mit "einfärben" würde man sehen was ich will. Die einträge sollen schon einzeln selktierbar sein, denn mit einem Klick auf einen Eintrag werden wird der entsprechende Datensatz in der Datenbank gesucht, damit man ihn editieren kann. Ganz kurz gesagt. Was ich möchte, ist, daß vom root Knoten beginnend (mit alle seinen Unterknoten und Einträgen), also bis zum nächsten root Knoten alle Einträge eingefärbt werden, beispielsweise ein helles rot oder so, damit das Auge einen Halt hat und auch die Zusammenhänge in dem gewählten Root Knoten besser sieht. Oder ein roter Rahmen um das Ganze. Beim Wechsel auf einen anderen root-eintrag, wird der vorige wieder auf seine normale Farbe zurückgesetzt und eben der gewählte wieder entweder eingefärbt oder ein Rahmen drumgesetzt. Nochmal als Beispiel: root1 child1 unterchild1 unterchild2 child2 _______________ root2 child1 unterchild1 child2 ________________ Wenn was in root2 selektiert wird, einfach alles von root2 rot einfärben Jetzt besser zu verstehen? Danke Josef |
AW: Treeview selected Node einfärben
Hallo,
Zitat:
Zitat:
Vielleicht hilft Dir folgender Code weiter:
Delphi-Quellcode:
Gruß
type
TForm1 = class(TForm) TreeView1: TTreeView; procedure TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); procedure TreeView1AdvancedCustomDraw(Sender: TCustomTreeView; const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); procedure TreeView1Change(Sender: TObject; Node: TTreeNode); procedure TreeView1Collapsed(Sender: TObject; Node: TTreeNode); procedure TreeView1Expanded(Sender: TObject; Node: TTreeNode); private { Private-Deklarationen } FCurrentRoot : TTreeNode; procedure InvalidateTreeview; public { Public-Deklarationen } end; procedure GetRectBottom (Node : TTreeNode; var Rect : TRect); begin while Assigned (Node) do begin Rect.Bottom := Node.DisplayRect (False).Bottom; if Node.Expanded then GetRectBottom (Node.getFirstChild, Rect); Node := Node.getNextSibling end end; function GetRootNode (const Node : TTreeNode) : TTreeNode; begin Result := nil; if Assigned (Node) then if not Assigned (Node.Parent) then Result := Node else Result := GetRootNode (Node.Parent) end; procedure TForm1.TreeView1AdvancedCustomDraw(Sender: TCustomTreeView; const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var r : TRect; begin if Assigned (FCurrentRoot) and (Stage = cdPrePaint) then begin r := FCurrentRoot.DisplayRect (False); r.Bottom := 0; GetRectBottom (FCurrentRoot.getFirstChild, r); if r.Bottom > 0 then begin TreeView1.Canvas.Brush.Color := clInfoBk; TreeView1.Canvas.FillRect (r) end end end; procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); begin if Stage = cdPrePaint then if not Assigned (FCurrentRoot) or (FCurrentRoot <> GetRootNode (Node)) then TreeView1.Canvas.Brush.Color := TreeView1.Color else TreeView1.Canvas.Brush.Color := clInfoBk end; procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); begin InvalidateTreeview; if Assigned (Node.Parent) then FCurrentRoot := GetRootNode (Node) else FCurrentRoot := Node end; procedure TForm1.TreeView1Collapsed(Sender: TObject; Node: TTreeNode); var n : TTreeNode; begin n := FCurrentRoot; InvalidateTreeview; FCurrentRoot := n end; procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode); var n : TTreeNode; begin n := FCurrentRoot; InvalidateTreeview; FCurrentRoot := n end; procedure TForm1.InvalidateTreeview; begin FCurrentRoot := nil; TreeView1.Invalidate end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz