![]() |
Schriftfarbe in Listbox
Hi,
in einer Listbox definiere ich die Farben folgendermaßen :
Delphi-Quellcode:
Brush läuft auch richtig, aber die Schriftfarbe bleibt immer schwarz. Da kann ich machen, was ich will. 8)
Listbox1.Canvas.Brush.Color := clRed;
Listbox1.Canvas.Pen.Color := clWhite; Listbox1.Canvas.FillRect(Rect); Listbox1.Canvas.TextOut(Rect.Left, Rect.Top, Listbox1.Items[Index]); |
Re: Schriftfarbe in Listbox
Muss im property "Font" (ListBox.Font.Color) gesetzt werden
|
Re: Schriftfarbe in Listbox
Das muß zur Laufzeit geschehen, da ich beim Entwurf nicht wissen kann, welcher Wert tatsächlich gebraucht wird. Ob es also weiß auf rot ist oder Standard.
|
Re: Schriftfarbe in Listbox
Na dann verwende ListBox1.Font.xxx
Das müsstest du ja überschreiben können Greetz alcaeus |
Re: Schriftfarbe in Listbox
Geht nicht:
Delphi-Quellcode:
???
....
Listbox1.Font.Color := clRed; .... |
Re: Schriftfarbe in Listbox
Das ^^ wird natürlich beim OnDrawItem - Ereignis eingesetzt.
Und die Listbox hat logischerweise den Stil lbOwnerdrawFixed |
Re: Schriftfarbe in Listbox
Natürlich setze ich das im OnDraw. 8) Allerdings ist Pen das falsche. Es ist Font, an gleicher Stelle. :zwinker:
|
Re: Schriftfarbe in Listbox
Hallo,
ich hab mir jetzt verschiedene Threads durchgelesen zu dem Thema, aber ich hab 's nicht verstanden. Ich will auch einer Listbox ein Item hinzufügen und jedem Item eine eigene Farbe verpassen. (Die Listbox soll Einträge der Registry anzeigen.) Zuerst wird ein Farbwert ausgelesen, dann soll die Farbe eben geändert (werden) und danach das Item in dieser Farbe hinzugefügt werden. Der Code sieht etwa so aus:
Delphi-Quellcode:
Ich habe es schon mit dem OnDrawItem versucht, aber da wurden gar keine Items hinzugefügt, wenn es so aussah ("Listbox1.Font.Color:=Farbe" oben dann ausgeklammert):
procedure TForm1.Listbox1Click(Sender: TObject);
[...] for i:=1 to Liste.Count do //Liste ist eine StringListe begin if regist.ValueExists('Name_'+IntToStr(i)) then begin Name:=regist.ReadString('Name_'+IntToStr(i)); Farbe:=regist.ReadInteger('Name_'+IntToStr(i)+'_color'); Listbox1.Font.Color:=Farbe; Listbox1.Items.Add(Name); end; end;
Delphi-Quellcode:
procedure TForm1.Listbox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); begin Listbox1.Font.Color:=Farbe; end; |
Re: Schriftfarbe in Listbox
Jo,
beim Hinzufügen der Items zur Liste, nutzt dir die Angabe der Farbe überhaupt nichts. Du musst die Farbinformation für jeden deiner Items in einer Extra-Liste speichern, oder erst im OnDrawItem-Ereignis aus der Registry auslesen. Bei der zweiten Methode, wird die Ausgabe etwas lahm, aber, sie ist am einfachsten zu realisieren. Lasse also bitte in "Listbox1Click" alles weg, was mit "Farbe" zu tun hat und setze Folgendes in "Listbox1DrawItem" so ein:
Delphi-Quellcode:
procedure TForm1.Listbox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); // "regist" ist in TForm1.FormCreate initialisiert worden?! var Farbe : TColor; begin Farbe:=regist.ReadInteger('Name_'+IntToStr(Index)+'_color'); Listbox1.Font.Color:=Farbe; end; |
Re: Schriftfarbe in Listbox
das ganze wie folgt ändern
Delphi-Quellcode:
Listbox1.Canvas.Brush.Color := clRed;
Listbox1.Canvas.Pen.Color := clWhite; Listbox1.Canvas.FillRect(Rect); Listbox1.Canvas.Font.Color := clRed; //<== natürli kannste auch ne andere farbe nehmen Listbox1.Canvas.TextOut(Rect.Left, Rect.Top, Listbox1.Items[Index]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 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