AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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, 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
 
#2

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
 
#3

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.629 Beiträge
 
Delphi 12 Athens
 
#4

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
 
#5

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
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TTreeView.CustomDraw

  Alt 22. Apr 2022, 13:28
Hier ein Bespiel. Das grüne und das rote Rechteck sind mit in der ImageList und diese ist auch beim TreeView als StateImages angelegt. Über den StateIndex der einzelnen Nodes wird das entsprechende Image ausgewählt.
Angehängte Dateien
Dateityp: zip StateImages.zip (3,3 KB, 7x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:19 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