Listview i kolorowanie - problem

0

Witam,

Czy może wie ktoś jak rozwiązać poniższy problem?

Mam ListView wypełniony w pierwszym wierszu nazwą i potem 12 kolumn z liczbami. Liczby ujemne chcę pokazać na czerwono. Mam taki kod:

procedure TForm1.ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
  if (subitem=1) and (strtoint(item.SubItems[0])<0) then
    listview1.Canvas.Font.color:=clred else listview1.Canvas.Font.Color:=clblack;
end;

Działa on poprawnie na pierwszej kolumnie z liczbami. Gdy dam w procedurze:

if (subitem=1) and (strtoint(item.SubItems[0])<0) then
  listview1.Canvas.Font.color:=clred else listview1.Canvas.Font.Color:=clblack;

if (subitem=2) and (strtoint(item.SubItems[1])<0) then
  listview1.Canvas.Font.color:=clred else listview1.Canvas.Font.Color:=clblack;

to wtedy robi na czerwono liczby tylko w drugiej kolumnie, a w pierwszej na czarno.

Gdy nie dam else listview1.Canvas.Font.Color:=clblack; to oczywiście na czerwono będzie cały wiersz, a mi chodzi o to aby tylko "komórki" z liczbami ujemnymi były na czerwono.

Proszę o pomoc.

0

http://www.delphidabbler.com/articles?article=16

Obadaj sobie "Figure 5" i kod nad nim. Może tam coś znajdziesz.

0

Dzięki za informacje. Już tam patrzyłem i tak jak widzisz tam kolorowane są pola z jednej kolumny. To właśnie napisałem, że w jednej kolumnie to działa (w ostatniej kolumnie nie trzeba dawać warunku else, który podałem, gdy chcemy kolorować tylko jedną kolumnę).

Nie udało mi się znaleźć żadnego przykładu, bo albo kolorują liczby, np. ujemne w całym wierszu, kolumnie, w we wszystkich kolumnach, parzystych,nieparzystych wierszach itp.

0
procedure TForm1.ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
  if (subitem>=1)and(subitems<=X) and (strtoint(item.SubItems[0])<0) then
    listview1.Canvas.Font.color:=clred 
    else 
    listview1.Canvas.Font.Color:=clblack;
end;

gdzie x to liczba oznaczająca ostatnią kolumne

0

Dzięki za propozycję. Tak już próbowałem i wtedy koloruje wszystkie kolumny pomiędzy tą z warunku subitem>= a subitem<=

1 użytkowników online, w tym zalogowanych: 0, gości: 1