Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Schriftfarbe in Listbox (https://www.delphipraxis.net/28437-schriftfarbe-listbox.html)

Hansa 24. Aug 2004 20:17


Schriftfarbe in Listbox
 
Hi,

in einer Listbox definiere ich die Farben folgendermaßen :

Delphi-Quellcode:
      Listbox1.Canvas.Brush.Color := clRed;
      Listbox1.Canvas.Pen.Color := clWhite;
      Listbox1.Canvas.FillRect(Rect);
      Listbox1.Canvas.TextOut(Rect.Left, Rect.Top, Listbox1.Items[Index]);
Brush läuft auch richtig, aber die Schriftfarbe bleibt immer schwarz. Da kann ich machen, was ich will. 8)

paelesoft 24. Aug 2004 20:21

Re: Schriftfarbe in Listbox
 
Muss im property "Font" (ListBox.Font.Color) gesetzt werden

Hansa 24. Aug 2004 20:36

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.

alcaeus 24. Aug 2004 20:37

Re: Schriftfarbe in Listbox
 
Na dann verwende ListBox1.Font.xxx
Das müsstest du ja überschreiben können

Greetz
alcaeus

paelesoft 24. Aug 2004 20:38

Re: Schriftfarbe in Listbox
 
Geht nicht:
Delphi-Quellcode:
  ....
  Listbox1.Font.Color := clRed;
  ....
???

paelesoft 24. Aug 2004 20:41

Re: Schriftfarbe in Listbox
 
Das ^^ wird natürlich beim OnDrawItem - Ereignis eingesetzt.
Und die Listbox hat logischerweise den Stil lbOwnerdrawFixed

Hansa 24. Aug 2004 20:59

Re: Schriftfarbe in Listbox
 
Natürlich setze ich das im OnDraw. 8) Allerdings ist Pen das falsche. Es ist Font, an gleicher Stelle. :zwinker:

Aike 21. Okt 2004 21:36

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:
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;
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):
Delphi-Quellcode:
procedure TForm1.Listbox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  Listbox1.Font.Color:=Farbe;
end;

paelesoft 5. Nov 2004 15:55

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;

SirThornberry 5. Nov 2004 16:31

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 01:14 Uhr.
Seite 1 von 2  1 2      

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