AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TTreeView.CustomDraw

Offene Frage von "Uwe Raabe"
Ein Thema von swestner · begonnen am 21. Apr 2022 · letzter Beitrag vom 22. Apr 2022
Antwort Antwort
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#1

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 05:34
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 = '1then
    begin
        Brush.Color:= clRed;
        FillRect(Box);
    end;
    if Txt = '2then
    begin
        Brush.Color:= clLime;
        FillRect(Box);
    end;
  end;
end;
Chris

Geändert von LoZe (22. Apr 2022 um 05:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 05:51
Moin...
Zitat:
with Tree.Canvas do
... aber bitte ohne das WITH.
  Mit Zitat antworten Zitat
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
85 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 07:53
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
Angehängte Grafiken
Dateityp: png Image1.png (7,2 KB, 19x aufgerufen)
Dateityp: png Image2.png (7,6 KB, 20x aufgerufen)
Dateityp: png TreeMitStandardFont.png (8,1 KB, 19x aufgerufen)
Stefan Westner
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 10:42
Hast du es im OnAdvancedCustomDrawItem Ereignis drin?
Chris
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#5

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 10:53
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;
Angehängte Grafiken
Dateityp: jpg Screenshot 2022-04-22 115210.jpg (4,8 KB, 12x aufgerufen)
Chris
  Mit Zitat antworten Zitat
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
85 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 11:38
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
Angehängte Grafiken
Dateityp: png Treeview.png (12,8 KB, 15x aufgerufen)
Stefan Westner
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.631 Beiträge
 
Delphi 12 Athens
 
#7

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 11:39
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):
  • kein zusätzliches Icon: ImageIndex =x, StateIndex := -1
  • zusätzliches Icon: StateImage=x, ImageIndex=y

Die Images müssen dann in derselben ImageList vorliegen und diese muss sowohl dem Images- als auch dem StateImage-Property des TreeView zugewiesen werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
85 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 11:42
Das mit dem StateIndex wäre grundsätzlich auch möglich. Ein zweites Icon vor dem eigentlichen Tree-Icon wäre kein Problem. Es muß nicht unbedingt der rote und grüne Kasten nach dem Icon sein.

Ich kann auch zwei Images machen rot und grün und diese dann vor dem eigentlichen Icon anzeigen.

Wie würde sowas dann realisiert werden?
Stefan Westner
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 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-2025 by Thomas Breitkreuz