also ich habe jetzt mal ein neues projekt gemacht, eine listview auf die form plaziert, und diese eigenschaften verändert:
- columns hinzugefügt
- items hinzugefügt
- multiselect auf true gestellt
- readonly auf true gestellt
- rowselect auf true gestellt
- viewstyle auf vsreport gestellt
dann habe ich beim code noch das image-zeugs entfernt, und so sieht er jetzt aus:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aTextRect:TRect; subitem: integer;
begin
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;
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+2;
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;
ergebnis: siehe anhang.
mach doch auch mal ein leeres projekt auf, und ändere die selben eigenschaften wie ich. dann fügst du genau den selben code rein und schaust was rauskommt.
vielleicht ist in deinem projekt noch mehr code drin, der irgendwas an der listview verändert, oder es ist irgend eine eigenschaft anders eingestellt als bei mir.