2008年7月25日

リストビューコントロールのReport形式で行毎に背景色を変える

リストビューコントロール(TListView)のReport形式で行毎に背景色を変えるにはOnCustomDrawItemイベントでSender.Canvas.Brush.Colorを変更します。
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
                                         Item: TListItem; 
                                         State: TCustomDrawState; 
                                         var DefaultDraw: Boolean);
begin

  if (Item.Index mod 2) = 0 then
  begin
    Sender.Canvas.Brush.Color := $FFE0FF;
  end
  else
  begin
    Sender.Canvas.Brush.Color := $FFFFE0;
  end;

end;

Canvasの属性だけを変更して実際の描画はDefaultDraw = TrueのままでTListViewに任せるのがポイントです。
同じように文字の色やスタイルなどの属性を変えるにはSender.Canvas.Font.ColorやSender.Canvas.Font.Styleを変更します。
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
                                         Item: TListItem;
                                         State: TCustomDrawState;
                                         var DefaultDraw: Boolean);
begin

  if cdsSelected in State then
  begin
    Sender.Canvas.Font.Style := Sender.Canvas.Font.Style + [fsBold];
  end;

end;

0 件のコメント: