Delphi-PRAXiS

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 ListBox - Zeile einfärben funktioniert nicht (https://www.delphipraxis.net/35274-listbox-zeile-einfaerben-funktioniert-nicht.html)

Tyler 4. Dez 2004 16:53


ListBox - Zeile einfärben funktioniert nicht
 
Hallo ihrs :)

ich hab folgenden Code im OnDrawItem einer Listbox:

Delphi-Quellcode:
  lb_debug.Canvas.Brush.Color := clWhite;

  if Pos('<', lb_debug.Items.ValueFromIndex[ lb_debug.ItemIndex]) = 1 then
    lb_debug.Canvas.Font.Color := clGreen
  else if Pos('>', lb_debug.Items.ValueFromIndex[ lb_debug.ItemIndex]) = 1 then
    lb_debug.Canvas.Font.Color := clRed
  else
    lb_debug.Canvas.Font.Color := clBlack;

  TopDif := (lb_debug.ItemHeight div 2) - (Canvas.TextHeight(#32) div 2);
  lb_debug.Canvas.TextRect(Rect, Rect.Left, Rect.Top + TopDif, lb_debug.Items[Index]);
(aus der Suche hier im Board :) )

Es geht darum, die Zeilen nach einem Kriterium einzufärben. Wenn das erste Zeichen also ein > ist, solls Rot sein, bei < solls Grün sein. Sonst schwarz.

Nur klappt das ganze nicht so richtig.
Erst ist alles grün, und färbt sich dann nur richtig ein, wenn ich die Zeile direkt anklicke.

Habt ihr ne Idee?

tyler

Pr0g 4. Dez 2004 17:34

Re: ListBox - Zeile einfärben funktioniert nicht
 
Liegt wohl daran, dass du auf komische Weise auf das zu zeichnende Item zugreifst, bei der Textausgabe dann aber richtig machst, so sollte es gehen:
Delphi-Quellcode:
procedure TForm1.lb_debugDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Col: TColor;
  S: String;
begin
  lb_debug.Canvas.Brush.Color := clWhite;
  lb_debug.Canvas.Pen.Color := clWhite;  

  lb_debug.Canvas.Rectangle(Rect);

  S := lb_debug.Items[Index];
  if S[1] = '<' then
    Col := clGreen
  else
  if S[1] = '>' then
    Col := clRed
  else
    Col := clBlack;

  lb_debug.Canvas.Font.Color := Col;

  lb_debug.Canvas.TextOut(Rect.Left + 1, Rect.Top + 1, lb_debug.Items[Index]);
end;
Die zwei mit "<--" gekenzeichneten Zeilen kannst du auch in OnCreate der Form oder so verschieben, da diese nicht jedesmal beim Zeichnen aufgerufen werden müssen.
Edit: sorry, hatte mich vertan ;)

MfG Pr0g

Tyler 4. Dez 2004 18:43

Re: ListBox - Zeile einfärben funktioniert nicht
 
vielen Dank Pr0g :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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