Mirror

How to highlight alternate rows in a TListView (Views: 708)


Problem/Question/Abstract:

How to highlight alternate rows in a TListView

Answer:

The following will draw all alternate lines with yellow text on blue background. It uses the OnAdvancedCustomDraw events of the listview. As a bonus you get full highlighting of selected lines.

procedure CheckPaintstage(Stage: TCustomDrawStage; itemIndex: Integer; canvas:
  TCanvas);
begin
  if Stage in [cdPrePaint, cdPreErase] then
  begin
    if Odd(itemIndex) then
    begin
      Canvas.Brush.Color := clBlue;
      if Stage = cdPrepaint then
        Canvas.Font.color := clYellow;
    end
  end;
end;

procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
begin
  if not (cdsSelected in State) then
    CheckPaintstage(Stage, item.Index, sender.canvas)
  else
    Sender.Canvas.Brush.Color := clHighlight;
end;

procedure TForm1.ListView1AdvancedCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
begin
  if not (cdsSelected in State) then
    CheckPaintstage(Stage, item.Index, sender.canvas)
  else
  begin
    Sender.Canvas.Font.Color := clHighlightText;
    Sender.Canvas.Brush.Color := clHighlight;
  end;
end;

<< Back to main page