Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Bilder in Treeview anzeigen


Skorsi - Fr 05.03.04 09:58
Titel: Bilder in Treeview anzeigen
Hallo,

ich möchte gerne in einer Treeview neben den Einträgen Bilder angezeigt haben.

Ich weiß auch dass man dazu die Eigenschaft Images benutzen kann,
doch weiß ich nicht was eine TCustomImageList ist und wie sie verwendet wird.

Danke für eure Hilfe


Keldorn - Fr 05.03.04 19:58

Hallo

Du packst eine Imalist-komponente (win32Reiter) auf die Form und lädst dort deine Images rein.
unter Treevie.images weißt du jetzt diese imagelist zu. Unter den Items kannst du dann die entsprechende Bildindex setzen.

Mfg Frank


Coder - Do 15.07.04 20:01

Wie geht das zur Laufzeit?


Keldorn - Do 15.07.04 20:25

einfach der treenode einen imageindex zuwesien, oder was meinst du genau :gruebel:


Coder - Fr 16.07.04 18:02

Aha.
Wie programmiert man das? (Source?)


Delete - Fr 16.07.04 21:45

Keldorn hat´s doch geschrieben:
Keldorn hat folgendes geschrieben:
einfach der treenode einen imageindex zuwesien, [...]

"ImageIndex" ist ein Integer und bekommt den passenden Wert aus deiner ImageList. Die Zählweise ist Null-basierend, d.h. das erste Bild in der Liste hat den Wert Null, das zweite Eins, usw.


Nerzhul - Fr 16.07.04 23:48

Hallo,

Ich hoffe es ist ok wenn ich meine Frage hier gleich im Anschluß poste, sie passt jedenfalls gut zum Thema:

Also, ich möchte in einem Treeview auch Bilder anzeigen lassen. Das geht mit einer ImageList und den entsprechenden Indexen setzen gut.
Das Problem: Wie kann ich verhindern, dass die Bildbreite freigelassen wird, wenn einem Knoten kein Bild zugewiesen wird? Gibt es da evtl. Eigenschaften des Treeviews oder der Knoten die ich übersehen habe, oder muss ich den Baum jetzt selber zeichnen?

Zur Verdeutlichung ein kleiner Screenshot:

user defined image

Danke,

-M


Bulvaye - Mi 21.07.04 23:06

Um's selber zeichnen kommst Du da meines Wissens wohl nicht drum herum. Du nimmst einfach das OnCustomDrawItem-Event und zeichnest alle Node-Texte, die kein Image zugewiesen bekommen haben, selbst - und zwar genau um die Image-Breite nach links versetzt. Ich bin jetzt aus dem Stehgreif heraus überfragt, ob es noch irgend einen Offset zu berücksichtigen gilt, aber ich würde es grundsätzlich folgendermaßen machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  DefaultDraw :=  Node.ImageIndex > -1;
  if not DefaultDraw then
    with Node.DisplayRect(True) do
      Tree.Canvas.TextOut(Left - ImageList.Width, Top, Node.Text);
end;

Grüße