Wenn Du hier mit Styles arbeitest, sind deren Inhalte nur so lange gültig, wie das Element (hier das ListboxItem) angezeigt wird, wenn es wieder aus Sicht ist, wird das Style-Item wieder freigegeben.
Daher gibt es das Event "OnApplyStyleLookUp". Hier müsstest Du jedem ListboxItem dieses Event zuweisen und im Event dann die Style-Elemente entsprechend mit Inhalten versehen.
Wenn Dir das zu umständlich ist: Oft wird übersehen, dass das ListboxItem schon ein Bitmap über "ItemData" hat. Hier kannst Du es auch direkt zuweisen und alles bleibt dann auch zur Laufzeit zu jeder Zeit an allen Stellen erhalten.
Dafür Dein Beispielcode leicht abgewandelt (Ergebnis siehe Screenshot):
Delphi-Quellcode:
procedure TForm26.Button1Click(Sender: TObject);
Var
ListBoxItem : TListBoxItem;
I : Integer;
BitmapFile : String;
Liste: TStringDynArray;
begin
liste:= TDirectory.GetFiles('D:\APic\BMP');
for I := 0 to length(liste)-1 do
begin
BitmapFile := Liste[i];
ListBoxItem := TListBoxItem.Create(nil);
ListBoxItem.Height := 50;
ListBoxItem.Parent := ListBox1;
ListboxItem.ItemData.Text := ExtractFileName (Liste[i]);
try
ListboxItem.ItemData.Accessory := TListBoxItemData.TAccessory.aNone;
If FileExists(BitmapFile) Then ListboxItem.ItemData.Bitmap.LoadFromFile(BitmapFile);
except
// Für Fehlerhaftes Bild kein Item nehmen
ListBoxItem.Free;
end;
end;
end;
Der ListBox musst Du dann bei "DefaultItemStyles" bei ItemStyle den Wert "listboxitembottomdetail" zuweisen.