AGB  ·  Datenschutz  ·  Impressum  







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

ListBox - Zeile einfärben funktioniert nicht

Ein Thema von Tyler · begonnen am 4. Dez 2004 · letzter Beitrag vom 4. Dez 2004
Antwort Antwort
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

ListBox - Zeile einfärben funktioniert nicht

  Alt 4. Dez 2004, 17:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#2

Re: ListBox - Zeile einfärben funktioniert nicht

  Alt 4. Dez 2004, 18:34
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
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#3

Re: ListBox - Zeile einfärben funktioniert nicht

  Alt 4. Dez 2004, 19:43
vielen Dank Pr0g
  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:50 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