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 CustumDrawItem (https://www.delphipraxis.net/101240-treeview-custumdrawitem.html)

dot 10. Okt 2007 10:59


Treeview CustumDrawItem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphigemeinde,
ich bin neu hier und würde gerne eine Frage stellen, gefunden habe ich leider nichts brauchbares dazu.

ich möchte in meinem Treeview die Klammern eines Items Blau zeichnen, aber nur die Klammern und den Text darin ( wie im bild )

der unterstehende Code hilft mir nicht da er den Kompletten text färbt

************************************************** *********************
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.Text = 'Meineaufgaben (430)' then
begin
TreeView1.Canvas.Font.Assign(TreeView1.Font);
TreeView1.Canvas.Font.Color := clBlue;
TreeView1.Canvas.Font.Style := TreeView1.Font.Style + [fsBold];
end;
DefaultDraw := True;
end;
************************************************** *********************

wäre sehr danke für die hilfe

dot

Muetze1 10. Okt 2007 12:04

Re: Treeview CustumDrawItem
 
Wenn du die Schriftfarbe auf blau setzt - woher soll er denn nun wissen das du ab einer bestimmten Stelle noch eine andere Farbe haben willst?

Du musst somit die TextAusgabe selber machen: teile den String, setze schwarz, gebe ersten Teil aus, setze blau, gebe anderen Teil aus...

dot 10. Okt 2007 13:20

Re: Treeview CustumDrawItem
 
danke für die theoretische info.
leider kriege ich genau das nicht hin, mir ist schon klar das ich mit clblue komplett alles einfärbe aber wie weise ich sowas überhaupt einem teil meines strings zu :gruebel:

Muetze1 10. Okt 2007 13:47

Re: Treeview CustumDrawItem
 
Na du musst den Text selber auf den Canvas malen. Siehe Delphi-Referenz durchsuchenTCanvas.TextOut() oder MSDN-Library durchsuchenDrawText().

dot 10. Okt 2007 19:52

Re: Treeview CustumDrawItem
 
...aber das ich kein trec im customdrawitem habe ist es schwierig beim TExtout die richtige positionen zu erreichen?

DeddyH 10. Okt 2007 20:00

Re: Treeview CustumDrawItem
 
Ich poste mal das Beispiel aus der Delphi 7 Hilfe:
Zitat:

Das folgende Beispiel zeigt, wie die Ereignisbehandlungsroutine OnCustomDrawItem Einträge und Linien des Baumdiagramms zeichnet, nachdem die Ereignisbehandlungsroutine OnCustomDraw den Hintergrund ausgefüllt hat.
Delphi-Quellcode:
procedure TCustomDrawForm.TVCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  NodeRect: TRect;
begin
  with TV.Canvas do
  begin
    // Wenn DefaultDraw True ist, können die Schrifteigenschaften des Knotens
    // geändert werden. Bei DefaultDraw = True zeichnet Windows die
    // Schaltflächen und ignoriert unsere Schrifthintergrundfarben.
    // Stattdessen wird die Eigenschaft Color von TreeView verwendet.

    if cdsSelected in State then
    begin
      Font.Assign(SelectedFontDialog.Font);
      Brush.Color := SelBkgColorDialog.Color;
    end;
    DefaultDraw := FDefaultDrawItem;
    // Bei DefaultDraw = False müssen Sie alle Einträge selbst zeichen,
    // einschließlich Schaltflächen, Linien, Grafiken und Text.

    if not DefaultDraw then

    begin
      // Auswahlrechteck zeichnen
      if cdsSelected in State then
      begin
        NodeRect := Node.DisplayRect(True);
        FillRect(NodeRect);
      end;

      NodeRect := Node.DisplayRect(False);

      if None1.Checked then

      // Kein Bitmap, daher in der Hintergrundfarbe zeichnen
      begin
        Brush.Color := BkgColorDialog.Color;
        Brush.Style := FBrushStyle;
        FillRect(NodeRect)
      end
      else
        // Nicht über das Hintergrund-Bitmap zeichnen

        Brush.Style := bsClear;

      NodeRect.Left := NodeRect.Left + (Node.Level * TV.Indent);

      // NodeRect.Left entspricht jetzt dem linken Teil der erweiterten Schaltfläche

      DrawButton(NodeRect, Node);

      NodeRect.Left := NodeRect.Left + TV.Indent + FButtonSize;

      // NodeRect.Left ist jetzt der linke Teil der Grafik

      DrawImage(NodeRect, Node.ImageIndex);

      NodeRect.Left := NodeRect.Left + ImageList.Width;

      // Nun kann der Text endlich ausgegeben werden

      TextOut(NodeRect.Left, NodeRect.Top, Node.Text);

    end;
  end;
end;

Man beachte das Node.DisplayRect ;)

s-off 10. Okt 2007 20:01

Re: Treeview CustumDrawItem
 
Hallo,

probier es mal mit TTreeNode.DisplayRect

Edit: *hmpf*


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