Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi treeview, clx, eigene farben und schriftart (https://www.delphipraxis.net/22850-treeview-clx-eigene-farben-und-schriftart.html)

semo 25. Mai 2004 09:01


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;

semo 26. Mai 2004 11:17

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

:?:

semo 2. Jun 2004 09:04

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:
{ .... }

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;
Wer kann da helfen???


Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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