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