so, ich habe jetzt auch mal ein panel unter die listview gebaut, und jetzt funktionierts mit den farben.
ich habe den code noch etwas abgeändert:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aTextRect:TRect; subitem: integer; backpanel: tpanel;
begin
if tlistview(sender).Tag <> 1 then
begin
backpanel := tpanel.create(self);
backpanel.Parent := tlistview(sender).Parent;
backpanel.Name := 'BackPanel1';
backpanel.Left := tlistview(sender).left;
backpanel.Top := tlistview(sender).top;
backpanel.Width := tlistview(sender).clientwidth;
backpanel.Height := tlistview(sender).clientheight;
backpanel.Visible := false;
tlistview(sender).Tag := 1;
backpanel.Color := $00CDEFE9;
end
else if (findcomponent('BackPanel1') is tpanel) then
(findcomponent('BackPanel1') as tpanel).Color := $00CDEFE9;
if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then
begin
DefaultDraw:=false;
aTextRect:=Item.DisplayRect(drLabel);
with Sender do
begin
Canvas.Pen.Color := $00CDEFE9;
Canvas.Brush.Color := $00CDEFE9;
Canvas.Rectangle(aTextRect);
aTextRect.Left:=aTextRect.Left+2;
atextrect.Right := atextrect.Right+5;
Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER);
Canvas.Brush.Color:=$008FC2B3;
Canvas.FrameRect(aTextRect);
for SubItem:=1 to Item.SubItems.Count do
begin
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect);
if TListView(Sender).ViewStyle=vsReport then
begin
with Sender do
begin
Canvas.Pen.Color := $00CDEFE9;
Canvas.Brush.Color := $00CDEFE9;
aTextRect.Left:=aTextRect.Left+6;
atextrect.Right := atextrect.Right+5 ;
Canvas.Rectangle(aTextRect);
Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER);
Canvas.Brush.Color:=$008FC2B3;
Canvas.FrameRect(aTextRect);
end;
end;
end;
end;
end;
end;
das panel wird also zur laufzeit erstellt.
ein kleiner schönheitsfehler gibts aber noch, siehe bild im anhang.