AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Virtual Tree View textfarbe einzelner Rows ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Virtual Tree View textfarbe einzelner Rows ändern?

Ein Thema von richard_boderich · begonnen am 19. Dez 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 12:36
Hallo

Ich wurde gerne die Textfarbe von bestimmten Row's im Virtual Tree View ändern? Kann mir jemand sagen wie ich das am besten(performant) mache und welche
Ereignisse ich nutzten sollte. Folgende Ereignisse kämen dafür eventuell in Frage, aber welches nehmen?

Delphi-Quellcode:
procedure TForm1.VstPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
begin

end;

procedure TForm1.VstNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; NewText: WideString);
begin

end;

procedure TForm1.VstBeforeItemPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
  var CustomDraw: Boolean);
begin

end;

procedure TForm1.VstBeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellRect: TRect);
begin

end;
mfG Richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:02
Wenn Du nur die Textfarbe ändern willst, nimmst Du am Besten PaintText():

Delphi-Quellcode:
 Case Column of
  0: TargetCanvas.Font.Color := clBlack;
  1: TargetCanvas.Font.Color := clBlue;
  2: TargetCanvas.Font.Color := clRed;
  else
 end;
Mal so als Beispiel.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:03
Hallo Richard,

du hast ein Ereignis vergessen: OnAfterItemErase:

Delphi-Quellcode:
procedure TForm1.VstAfterItemErase(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect);
begin
  if Sender.Selected[Node] then
    Exit;

  if Odd(Node.Index)
    then TargetCanvas.Brush.Color := clRed
    else TargetCanvas.Brush.Color := clYellow;

  TargetCanvas.FillRect (ItemRect);
end;
Der Code färbt die Zeilen des Baums abwechselnd rot und gelb - abhängig vom Knotenindex. Selektierte Zeilen erhalten keine spezielle Färbung.

//Edit: Ok, es ging um die Textfarbe. Wer lesen kann...

Gruß Hawkeye
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:08
Mal ist Blaue geraten ...

BeforeItemPaint wird gefeuert wenn, das ganze Item, also eine Zeile gezeichnet wird und
BeforeCellPaint für jede einzelne Zelle bzw. Spalte.

Wenn du nur eine Zeile, also ein Item "einfärben" willst würde ich dir zu BeforeItemPaint raten.
Für einzelne Zellen bzw. Spalten hängst du dich in BeforeCellPaint rein.

Will mal hoffen, dass ich hier einen Mist erzähle, aber so viel anders als in nem TListview wird das nicht sein.

Nun hast du die Wahl
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#5

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:33
@All

Also Painttext scheint nicht geeignet. Bei Onbeforeitempaint habe ich zwar Zugriff auf die Eigenschaft Font.color der Canvas, jedoch will ich das
Item ja in Abhängigkeit von dem Celltext einfärben.

Also sowas in der Art.

Wenn Celltext von Column 3 des aktuellen Items = "test", dann canvas.font.color:=clred;

mfG Richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:44
Zitat:
Ich wurde gerne die Textfarbe von bestimmten Row's im Virtual Tree View ändern?
onPaintText ist am besten geeignet.
Hat aber R. schon geschrieben.

Was hindert/stört dich an dem Ereignis?
Deine Meinung können wir bestimmt weg diskutieren.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 13:46
Hallo,

das Ereigniss, dass Du suchst ist OnPaintText. Folgend ein Beispiel, wie es funktionieren könnte. Leider ist aus Deinem Post nicht ersichtlich, wie Du die Daten im Tree speicherst.

Delphi-Quellcode:
procedure TForm1.vtListePaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
var d:PMyNodeData;
begin
  if (Node=nil) then Exit;
  d:=Sender.GetNodeData(Node);
  with TargetCanvas do
  begin
    if (Column=3) then if (d^.MeinText='test') then Font.Color:=clRed;
  end; // with TargetCanvas
end;
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 14:06
@Gollum & generic

Also ich verwende zurzeit noch Records (@generic Asche auf mein Haupt )
Ich habe den Code von Gollum jetz so angepasst. Problem ist, das es die Zeile nicht färbt.

Delphi-Quellcode:
procedure TForm1.VstPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
var d: PRMeineDaten;
  begin
  d:=Sender.GetNodeData(Node);
  with TargetCanvas do
  begin
    if (Column=3) then if (d^.Hidden='test') then Font.Color:=clRed;
  end; // with TargetCanvas

end;
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 14:13
Hallo,

seltsam, bei mir funktioniert es so, wie im obigen Thread beschrieben. Damit werden auch keine Zeilen eingefärbt, sondern nur der Text in der Spalte. Bist Du auch sicher, dass in der entsprechenden Spalte auch der erwartete Text drinsteht? Abgesehen davon, ist die 3. Spalte intern die 2te, da die Zählerei ja bei 0 beginnt.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Virtual Tree View textfarbe einzelner Rows ändern?

  Alt 19. Dez 2007, 14:18
Zitat von richard_boderich:
Also ich verwende zurzeit noch Records
Ist doch nicht schlecht. In den meinsten Fällen reicht das auch.
Mein Beispiel hätte nur paar Sachen doppelt implementieren müssen.
(Die Gesamtsumme für OnCompareNodes und onGetText)

Zitat von richard_boderich:
Delphi-Quellcode:
procedure TForm1.VstPaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
var d: PRMeineDaten;
begin
  d:=Sender.GetNodeData(Node);
  with TargetCanvas do
  begin
    if (Column=3) then if (d^.Hidden='test') then Font.Color:=clRed;
  end; // with TargetCanvas
end;
Das sieht richtig aus.

Ich meine dein Vergleich geht nicht richtig.
Dran gedacht das Column's bei 0 anfangen zu zählen?
4. Column muss nicht Wert 3 sein.
Wenn du die Reihenfolge in der IDE verändert hast, kann das ein andere Wert sein.
(Position)

[edit]
es wird [wenn] auch nur der text der 4. Cell eingefärbt!
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:49 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