How to highlight alternate rows in a TListView (Views: 28)
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; |