Guten Tag,
ich lade in einer for-Schleife Bilder aus dem Internet herunter und speichere sie in einer TList (oder TObjectList). Später möchte ich über eine Listbox das entsprechende Bild in einem TImage anzeigen. Nun habe ich einige "anomalien" entdeckt, die ich mir noch nicht erklären kann. Unter anderem sind die ersten 4 Einträge (also bis zum Index 3) leer bzw. es wird kein Bild angezeigt. Desweiteren funktioniert die Anzeige nicht, wenn ich zur Index-Angabe die Listbox.ItemIndex Property nutze. Konstante Werte oder die last-Eigenschaft gehen wiederum. Beim Debuggen sind die Werte vom ItemIndex korrekt und die selben Werte funktionieren als Konstante.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
uploadId:
String;
video: TdJSON;
client: THTTPClient;
http: IHTTPResponse;
pic: TPicture;
begin
if ListBox1.ItemIndex < 0
then
exit;
Listbox2.items.clear;
videos.Free;
videos := TObjectList<TdJSON>.create;
thumbnails.free;
thumbnails := TObjectList<TPicture>.create;
//.....\\
for video
in ytapi.JSON['
items']
do
begin
ListBox2.Items.Add(video['
snippet|title'].AsString);
videos.Add(video);
client := THTTPClient.Create;
http := client.Get(Video['
snippet|thumbnails|high|url'].AsString);
// Bild herunterladen
thumbnails.Add(TPicture.Create);
// Neuer Eintrag
thumbnails.Last.LoadFromStream(http.ContentStream);
// Bild in Liste speichern
end;
pic := thumbnails[0];
image1.Picture := pic;
// Hier wird ein Bild angezeigt, egal welcher Index (0 - 49)
end;
Nachfolgend kommen ein paar Varianten des gleichen Events
Delphi-Quellcode:
procedure TForm1.ListBox2Click(Sender: TObject);
var
client: THTTPClient;
http: IHTTPResponse;
i: Integer;
pic: TPicture;
begin
if Listbox2.ItemIndex < 0 then
exit;
pic := thumbnails[ListBox2.ItemIndex];
Image1.Picture := pic; // Liefert nie ein Ergebnis
end;
Delphi-Quellcode:
procedure TForm1.ListBox2Click(Sender: TObject);
var
client: THTTPClient;
http: IHTTPResponse;
i: Integer;
pic: TPicture;
begin
if Listbox2.ItemIndex < 0 then
exit;
pic := thumbnails[30];
Image1.Picture := pic; // Liefert ein Ergebnis für Indizies > 3
end;
Hat jemand eine Idee, warum das nicht so funktioniert, wie ich mir das denke?