![]() |
treeview, clx, eigene farben und schriftart
ich möchte für jede zeile eine eigene schriftart, größe und farbe festlegen.
dabei tritt aber das problem auf, dass der canvas nur begrenzt ist.....
Code:
// tritt vor dem Standardzeichnen eines Knoten des TreeView ein
procedure TMainForm.TreeView1CustomDrawItem(Sender: TCustomViewControl; Item: TCustomViewItem; Canvas: TCanvas; const Rect: TRect; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var newRect: TRect; begin // TCustomDrawStage: definiert ein Stadium während des benutzerdefinierten // Zeichnens: 2 Fälle --> cdPrePaint oder cdPostPaint with TTreeNode(Item) do begin Canvas.Pen.Color := TreeView1.Color; // Rahmenfarbe //Canvas.Brush.Color := clYellow; // Hintergrundfarbe Canvas.Rectangle(Rect); // alle dem root untergeordneten Nodes if Parent = rootNode then begin Canvas.Font.Color := clBlue; // alle SubNodes end else if parent <> nil then begin Canvas.Font.Color := clRed; Canvas.Font.Size := 14; Canvas.Font.Name := 'Arial'; Memo1.Lines.Add(Text + IntToStr(Canvas.TextWidth(Text))); // rootNode end else begin Canvas.Font.Color := clBlack; end; Canvas.TextRect(Rect, Rect.Left, Rect.Right, Text); end; // DefaultDraw gibt an, ob die Standardausgabe nach dem Beenden dieser Routine // durchgeführt werden soll. DefaultDraw := False end; |
Re: treeview, clx, eigene farben und schriftart
danke für die zahlreiche hilfe :gruebel:
ich habe es jetzt soweit selbst erledigt indem ich mir eine klasse gebastelt habe, dort die eigenschaften für die einzelnen ebenen einlese und die eigenschaften bei jedem TreeView1CustomDrawItem für jede Ebene anwende. nur habe ich das problem mit der schriftgröße.... wie kann ich die höhe und die breite des Items (TTreeNode) anpassen, so dass auch ein Text der Schriftgröße 14 oder > da reinpasst? TTreeNode(item).Height ist z.bsp. eine Nur-Lesen-Eigenschaft.... auch die Breite ist zu klein, der Text wird abgeschnitten :?: |
Re: treeview, clx, eigene farben und schriftart
also: die breite habe ich jetzt folgendermassen angepasst:
für den rootNode einfach den Text erweitern. die anderen unterelemente werden dann daran angepasst:
Code:
while Canvas.TextWidth(sNodeText) < aTreeView.Width - 2*aTreeView.Indent do
sNodeText := sNodeText + ' '; aber wie kann ich die höhe anpassen??? habe was für die vcl gefunden, das sich aber in der clx nicht anwenden kann:
Code:
Wer kann da helfen???
{ .... }
uses CommCtrl; { .... } procedure SetTreeViewItemHeight(aTreeView: TTreeView; aItemHeight: Word); begin aTreeView.Perform(TVM_SETITEMHEIGHT, aItemHeight, 0); end; // Example: procedure TForm1.Button1Click(Sender: TObject); begin SetTreeViewItemHeight(TreeView1, 30); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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