TTreeView.CustomDraw
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
kann mir jemand weiterhelfen bzw. hat ein Beispiel, wie in einem Treeview ein customdraw implementiert wird? Konkret habe ich einen Baum, der text und Symbole anzeigt. Abhängig vom Node.Text würde ich jetzt gerne zwischen das Symbol und den Text ein rotes oder grünes Quadrat zeichnen (siehe Screenshot). Ich habe mir schon zieg Beispiele usw. angesehen, komme da aber nicht weiter.... Danke Stefan |
AW: TTreeView.CustomDraw
schau dir mal den VirtualTreeView an, da kann man wesentlich mehr mit machen, ist auch wesentlicher schneller !!!
|
AW: TTreeView.CustomDraw
Danke für den Tip, aber ich benötige eine Info zum OwnerDraw und keine neue Komponente. Vielleicht kann mir da jemand weiterhelfen.
|
AW: TTreeView.CustomDraw
Hallo, So vielleicht? (ungetestet)
Delphi-Quellcode:
procedure TForm1.TreeViewCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var Tree:TTreeView; BG:TRect; TR:TRect; Box:TRect; txt:String; begin Tree:= Sender as TTreeView; BG:= Node.DisplayRect(true); TR:= Rect(BG.Left + BG.Height + 4, BG.Top,BG.Right,BG.Bottom); Box:= Rect(BG.Left,bg.Top,BG.Left + BG.Height,bg.Bottom); Txt:= Node.Text; with Tree.Canvas do begin if cdsSelected in State then begin Brush.Color:= clHighlight; Font.Color:= clHighlightText; end else begin Brush.Color:= clWindow; Font.Color:= clWindowText; end; FillRect(BG); TextRect(TR,Txt,[tfVerticalCenter,tfSingleLine]); if Txt = '1' then begin Brush.Color:= clRed; FillRect(Box); end; if Txt = '2' then begin Brush.Color:= clLime; FillRect(Box); end; end; end; |
AW: TTreeView.CustomDraw
Moin...8-)
Zitat:
|
AW: TTreeView.CustomDraw
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
danke für die Antwort. Folgende Probleme mit dem Beispielcode: 1. Die Schrift entspricht nicht mehr dem Standardfont 2. Das Icon wird nur angezeigt, wenn der Knoten selektiert ist 3. Das Icon wird hinter dem Texte angezeigt - ich hätte es gerne zwischen dem Text und deme rsten Symbol. Also quasi 2 Icons nebeneinander am Anfang. Was müßte ich ändern? Grüße Stefan |
AW: TTreeView.CustomDraw
Hast du es im OnAdvancedCustomDrawItem Ereignis drin?
|
AW: TTreeView.CustomDraw
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm3.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
var PaintImages, DefaultDraw: Boolean); var Tree:TTreeView; BG:TRect; TR:TRect; Box:TRect; txt:String; begin Tree:= Sender as TTreeView; BG:= Node.DisplayRect(true); TR:= Rect(BG.Left + BG.Height + 4, BG.Top,BG.Right,BG.Bottom); Box:= Rect(BG.Left,bg.Top,BG.Left + BG.Height,bg.Bottom); Txt:= Node.Text; with Tree.Canvas do begin if cdsSelected in State then begin Brush.Color:= clHighlight; Font.Color:= clHighlightText; end else begin Brush.Color:= clWindow; Font.Color:= clWindowText; end; // Nur Zeichnen wenn Eintrag Erkannt!!! if (pos('1',Txt) = 1) or (pos('2',Txt) = 1) then begin FillRect(BG); TextRect(TR,Txt,[tfVerticalCenter,tfSingleLine]); if pos('1',Txt) = 1 then begin Brush.Color:= clRed; FillRect(Box); end; if pos('2',Txt) = 1 then begin Brush.Color:= clLime; FillRect(Box); end; end; end; end; |
AW: TTreeView.CustomDraw
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
mit obiger Routine sieht es bei mir jetzt aus wie im Screenshot. Das rote und das grüne Quadrat liegen hinter dem Symbol aus der ImageList, der Text wird am Ende abgeschnitten und am Ende der Zeile sind rote und grüne Balken... Stefan |
AW: TTreeView.CustomDraw
Ist es denn erforderlich, dass die optionalen Grafiken zwischen Bild und Text unterschiedliche Größe haben müssen? Andernfalls könnte man vielleicht noch mit dem StateIndex des Eintrags etwas machen - ganz ohne OwnerDraw. Damit kann ein weiteres Icon angezeigt werden, allerdings nur vor dem anderen. Durch geschickte Zuordnung der Images lässt sich das aber ausgleichen (x ist der Index des normalen Icons, y der des optionalen):
Die Images müssen dann in derselben ImageList vorliegen und diese muss sowohl dem Images- als auch dem StateImage-Property des TreeView zugewiesen werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 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