AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Icons in Treeview

Ein Thema von Gehstock · begonnen am 11. Sep 2007 · letzter Beitrag vom 14. Sep 2007
Antwort Antwort
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#1

Icons in Treeview

  Alt 11. Sep 2007, 08:25
Datenbank: Access • Zugriff über: ADO
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)
Miniaturansicht angehängter Grafiken
demo_948.jpg  
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Icons in Treeview

  Alt 11. Sep 2007, 08:27
Mach mal lieber Node := tnodes.AddChild(...) und dann entferne die Kommentare vor den 2 Zeilen.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Icons in Treeview

  Alt 12. Sep 2007, 05:31
Klappt leider nicht
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Icons in Treeview

  Alt 12. Sep 2007, 06:09
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:
Var
   Unterknoten: TTreeNode;



UnterKnoten:= tnodes.AddChild(node,frmmain.ADOQuery1.FieldByName('Feld1').AsString);
Dann kann man den Unterknoten mit einem Icon belegen.

UnterKnoten.ImageIndex:=1; Oder eine Bedingung schreiben:

Delphi-Quellcode:
If Darstellung= 'Fahrradthen
  Unterknoten.ImageIndex:= 2; //Fahrradbild
 Else
  Unterknoten.ImageIndex:= 3; //Autobild
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Icons in Treeview

  Alt 13. Sep 2007, 08:25
Delphi-Quellcode:
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;
führt zu: siehe Bild irgendwas hab ich übersehen
Miniaturansicht angehängter Grafiken
demo_105.jpg  
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Icons in Treeview

  Alt 13. Sep 2007, 13:08
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:
{-------------------------------------------------------------------------------
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;
Und die Funktion ist doppelt:

Delphi-Quellcode:
{-------------------------------------------------------------------------------
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;
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.

Ich hoffe Du blickst da durch wie ich das meine.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Icons in Treeview

  Alt 14. Sep 2007, 08:23
war unterdessen selber draufgekommen
Delphi-Quellcode:

Procedure 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;
Danke Trotzdem
Marcel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz