Hallöle...
Ich zeige dir mal ein Beispiel wie ich Icons in die Liste bekomme. Du mußt es auf deine Gegebenheiten anpassen.
1. das SubItem muß bestehen auch wenn es leer = '' ist
2. Im CustomDrawSubItem zeichnest du es.
Hinweis: Um die Freigabe des Images mußt du dich eventuell selbst kümmern. (OnDeletion)
Delphi-Quellcode:
procedure TfrPreferences.ShowList(aList: TListEmployee);
var
Item: TListItem;
Employee: TEmployee;
LastIndex: Integer;
begin
lvEmployees.BeginUpdate;
try
lvEmployees.Items.Clear;
for Employee in aList do
begin
if Employee.State <> ddsDeleted then
begin
Item := lvEmployees.Items.Add;
Item.Data := Employee;
Item.SubItems.Add(Employee.Name);
Item.SubItems.Add(Employee.FirstName);
Item.SubItems.Add(Employee.PersonalNumber);
Item.SubItems.Add(IntToStr(Integer(Employee.Active)));
Item.ImageIndex := dmSmall.GetIconDataState(Employee.State); // Standard Image der ersten Spalte
end;
end;
finally
lvEmployees.Sort;
lvEmployees.EndUpdate;
end;
end;
procedure TfrPreferences.lvEmployeesCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aRect: TRect;
aIcon: TIcon;
begin
if SubItem > 3 then
begin
aIcon := TIcon.Create;
try
DefaultDraw := False;
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aRect);
case SubItem of // 4.SubItem
4:
begin
dmCommon.GetIconActive(TEmployee(Item.Data).Active, aIcon); // Laden Icon => aIcon hält das Bild
end;
end;
Sender.Canvas.Draw(aRect.Left + ((aRect.Right - aRect.Left - aIcon.Width) div 2), aRect.Top, aIcon); // anzeigen
finally
aIcon.Free;
end;
end;
end;