问题是这样的
当ListView的ViewStyle为VsReport
 HideSelection := FALSE;需求
  当谋一行被选择时,当前行显示为红色,当鼠标热点离开ListView后,被Selected的行,仍然显示为红色,直到别的行被选择时,该行才还原为原来的颜色。另外,怎么改变ScrollBar的颜色?

解决方案 »

  1.   

    ListView1的ownerdraw设为true
    procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
      Item: TListItem; Rect: TRect; State: TOwnerDrawState);
    var
      ColorBrush,ColorFont:TColor;
    begin
    TControlCanvas(Sender.Canvas).UpdateTextFlags;
      ColorBrush:=Sender.Canvas.Brush.Color;
      ColorFont:=Sender.Canvas.Font.Color;
      if odSelected in State then
      begin
       // Sender.Canvas.Brush.Color := clred;
        Sender.Canvas.Font.Color := clgreen;
      end;
      Sender.Canvas.FillRect(Rect);
      Sender.Canvas.TextOut(Rect.Left + 2, Rect.Top, Item.Caption);
      Sender.Canvas.Brush.Color:=ColorBrush;
      Sender.Canvas.Font.Color:=ColorFont;end;
      

  2.   

    procedure TForm1.ListView3CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      r: TRect;
      i: Integer;
    begin    with ListView3.Canvas do
        begin
          case Item.Index mod 2 of
            0: Brush.Color :=$00FDE1D7;
            1: Brush.Color := clcream;
          end;
        end;
     with ListView3.Canvas do
      if cdsSelected in State then begin
        Brush.Color := $0000D500;
        r := Item.DisplayRect(drLabel);
        // Item
        FillRect(r);
        TextOut(r.Left+2, r.Top, Item.Caption);
        // SubItem
        for i := 0 to Item.SubItems.Count - 1 do begin
          ListView_GetSubItemRect(ListView3.Handle, Item.Index, i+1, LVIR_LABEL, @r);
          FillRect(r);
          TextOut(r.Left+5, r.Top, Item.SubItems[i]);
        end;
        DefaultDraw := False;
      end;
    end