![]() |
Datenbank: Access • Zugriff über: ADO
Icons in Treeview
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Procedure OpenDB;
var i: integer; node:Tnode; tnodes:TTreenodes begin tnodes := frmmain.TreeView1.Items; frmmain.ADOConnection1.GetTableNames(st,False); //frmmain.TreeView1.Items.Clear; for i:=0 to st.Count - 1 do begin while frmmain.ADOQuery1.Active do frmmain.ADOQuery1.Close; frmmain.ADOQuery1.SQL.Text := 'select * from '+st.Strings[i]; frmmain.ADOQuery1.Open; node := tnodes.Add(nil,st.Strings[i]+' ('+inttostr(frmmain.ADOQuery1.RecordCount)+')'); SetNodeBoldState(node, True); node.ImageIndex:=0; node.StateIndex:=0; While Not frmmain.ADOQuery1.Eof do begin tnodes.AddChild(node, frmmain.ADOQuery1.FieldByName('Feld1').AsString); //node.ImageIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3'])+3; //node.StateIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3'])+3; frmmain.ADOQuery1.Next; end; end; st.Free; end; wie bekomme ich unterschiedliche Icons im Treeview und zwar in die Untereinträge so wie im Anhang (Markierung) |
Re: Icons in Treeview
Mach mal lieber Node := tnodes.AddChild(...) und dann entferne die Kommentare vor den 2 Zeilen.
|
Re: Icons in Treeview
Klappt leider nicht
|
Re: Icons in Treeview
Hallo Gestock,
für unterschiedliche Icons musst Du den Unterknoten einen Icon zuweisen. Das ist jetzt nur ein Beispiel, aber vielleicht kann man erkennen was ich meine.
Delphi-Quellcode:
Dann kann man den Unterknoten mit einem Icon belegen.
Var
Unterknoten: TTreeNode; UnterKnoten:= tnodes.AddChild(node,frmmain.ADOQuery1.FieldByName('Feld1').AsString);
Delphi-Quellcode:
Oder eine Bedingung schreiben:
UnterKnoten.ImageIndex:=1;
Delphi-Quellcode:
Bis bald Chemiker
If Darstellung= 'Fahrrad' then
Unterknoten.ImageIndex:= 2; //Fahrradbild Else Unterknoten.ImageIndex:= 3; //Autobild |
Re: Icons in Treeview
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
führt zu: siehe Bild irgendwas hab ich übersehen
Procedure OpenDB;
var i: integer; tnodes : TTreeNodes; node : TTreeNode; begin tnodes := frmmain.TreeView1.Items; frmmain.ADOConnection1.GetTableNames(st,False); frmmain.TreeView1.Items.Clear; for i:=0 to st.Count - 1 do begin while frmmain.ADOQuery1.Active do frmmain.ADOQuery1.Close; frmmain.ADOQuery1.SQL.Text := 'select * from '+st.Strings[i]; frmmain.ADOQuery1.Open; node := tnodes.Add(nil,st.Strings[i]+' ('+inttostr(frmmain.ADOQuery1.RecordCount)+')'); SetNodeBoldState(node, True); node.ImageIndex:=0; node.StateIndex:=0; While Not frmmain.ADOQuery1.Eof do begin node:= tnodes.AddChild(node, frmmain.ADOQuery1.FieldByName('Feld1').AsString); node.ImageIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3']); node.StateIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3']); frmmain.ADOQuery1.Next; end; end; st.Free; end; |
Re: Icons in Treeview
Hallo Gestock,
Um den richtigen Knoten anzuhängen, muss zuvor der Elternknoten gefunden werden. Also ich mache das so (ist mit Sicherheit nicht für Tausende Knoten geeignet):
Delphi-Quellcode:
Und die Funktion ist doppelt:
{-------------------------------------------------------------------------------
function: TVNodeInsert(); overload; ltz.Aendr.: 19.04.2007 Parameter: Nod: TTreeNodes // TTreeView.Items - Liste var NeueNode: TTreeNode // Neuer Knoten zurückgeben const strElternKnoten: String // ElternKnoten const strKnoten: String // Knoten der am ElternKnoten kommt Rueckgabe: TRUE= Knoten eingetragen FALSE= Knoten nicht eingetragen Beschr.: Mit dieser Funktion wird ein neuer Knoten an die richtige Stelle im TTreeView eingetragen. Bei dieser Funktion muss mindestens 1 Knoten schon vorhanden sein. Es wird die Stelle in TTreeView ge- sucht die mit der Elternknoten übereinstimmt und der neue Knoten, wenn er noch nicht vorhanden ist angehängt. Aufruf: TVNodeInsert(MS_TV.Items, Ebene2, 'Meßstellen', 'EO-Tank'); -------------------------------------------------------------------------------} function TVNodeInsert (Nod: TTreeNodes; var NeueNode: TTreeNode; const strElternKnoten: String; const strKnoten: String): boolean; overload; var TempNode: TTreeNode; begin result:= FALSE; // Es ist kein Knoten im Baum eingetragen worden TempNode:= Nod.GetFirstNode; // Hier wird der Root-Knoten in sNode gespeichert while TempNode <> NIL do // Solange wiederholen, bis SNode = NIL ist begin If (CompareText(TempNode.Text, StrElternKnoten)=0) then begin if NOT(IstDoppelt(Nod, strKnoten)) then // Ist der Knoten nicht vorhanden begin NeueNode:= Nod.AddChild(TempNode,StrKnoten); // Neuer Knoten eintragen Result:= TRUE; // Es ist ein Knoten eingetragen end; end; TempNode:= TempNode.getNext; // Nächster Knoten in sNode end; end;
Delphi-Quellcode:
Also grob gesagt die Funktion geht durch den Baum bis der Elternknoten gefunden worden ist, in dem Fall wird noch geprüft ob sie schon doppelt vorhanden ist, ist das nicht der Fall so wird der Kindknoten am Elternknoten gehängt.
{-------------------------------------------------------------------------------
function: IstDoppelt() ltz.Ändr.: 18.04.2007 Syntax: function IstDoppelt (Nodes: TTreeNodes; const S: String): boolean; Parameter: Nodes ist TreeView.Items, also eine Liste von Baumknoten S ist ein String-Ausdruck Rückgabe: FALSE= Eintrag ist noch nicht vorhanden und kann eingetragen werden. TRUE= Eintrag ist vorhanden und soll nicht eingetragen werden. Beschr.: Es werden alle Knoten geprüft,ob der neue Eintrag schon vorhanden ist Aufruf: IstDoppelt(Nod, strKnoten); -------------------------------------------------------------------------------} function IstDoppelt(Nod: TTreeNodes; StrKnoten: String):boolean; var sNode: TTreeNode; begin Result:= FALSE; // Eintrag noch nicht vorhanden. sNode:= nod.getFirstNode; // Auf den ersten Knoten setzen. while sNode <> NIL do // Solange prüfen bis kein Eintrag begin If (CompareText(sNode.Text, StrKnoten)=0) then // Ist der Knoten schon begin // vorhanden? Result:= TRUE; // Eintrag vorhanden end; sNode:= sNode.GetNext; // nächster Knoten prüfen end; end; Ich hoffe Du blickst da durch wie ich das meine. Bis bald Chemiker |
Re: Icons in Treeview
war unterdessen selber draufgekommen
Delphi-Quellcode:
Danke TrotzdemProcedure OpenDB; var i: integer; tnodes : TTreeNodes; node,Eintrag : TTreeNode; begin tnodes := frmmain.TreeView1.Items; frmmain.ADOConnection1.GetTableNames(st,False); frmmain.TreeView1.Items.Clear; for i:=0 to st.Count - 1 do begin while frmmain.ADOQuery1.Active do frmmain.ADOQuery1.Close; frmmain.ADOQuery1.SQL.Text := 'select * from '+st.Strings[i]; frmmain.ADOQuery1.Open; node := tnodes.Add(nil,st.Strings[i]+' ('+inttostr(frmmain.ADOQuery1.RecordCount)+')'); SetNodeBoldState(node, True); node.ImageIndex:=0; node.StateIndex:=0; While Not frmmain.ADOQuery1.Eof do begin Eintrag:= tnodes.AddChild(node, frmmain.ADOQuery1.FieldByName('Feld1').AsString); Eintrag.ImageIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3']); Eintrag.StateIndex:=StrtoInt(frmmain.ADOQuery1.FieldValues['Feld3']); frmmain.ADOQuery1.Next; end; end; st.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 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 by Thomas Breitkreuz