(03-01-2017, Saat: 15:04)AliZairov Adlı Kullanıcıdan Alıntı: (03-01-2017, Saat: 14:38)SimaWB Adlı Kullanıcıdan Alıntı: Daha önce yazdığım PPL'i bir araştırın lütfen. Tam da ihtiyacınız olan şey.
Sadece GetImage fonksiyonunuzu TTask içine atmanız bile yeterli olacaktır.(Synchronize'ye dikkat ederek)
http://docwiki.embarcadero.com/RADStudio...ng_Library
Bu sefer resmi bile indirmeden sadece listeyi ekledi.
procedure TDM.AddList(ListView: TListView; Query: TFDQuery);
var
I: Integer;
LItem: TListViewItem;
aTask: ITask;
MS: TMemoryStream;
HTTP: THttpClient;
begin
Application.ProcessMessages;
ListView.Items.Clear;
ListView.BeginUpdate;
with Query do
begin
SQL.Clear;
SQL.Text := 'Select * From channels';
Open;
end;
Query.First;
for I := 0 to Query.RecordCount - 1 do
begin
LItem := ListView.Items.Add;
aTask := TTask.Create (procedure ()
begin
MS := TMemoryStream.Create;
HTTP := THttpClient.Create;
try
MS.Seek(0, soFromBeginning);
HTTP.Get(Query.FieldByName('image').Text, MS);
LItem.Bitmap.LoadFromStream(MS);
finally
HTTP.Free;
//MS.free
end;
end);
aTask.Start;
//LItem.Bitmap.LoadFromStream(getImage(Query.FieldByName('image').Text));
LItem.Text := Query.FieldByName('name').Text;
LItem.Detail := Query.FieldByName('code').Text;
Query.Next;
end;
ListView.EndUpdate;
Query.Active := False;
end;
Merhaba,
Döngü içerisinde oluşturduğunuz,
aTask işlemi arka planda devam ederken,
aynı zamanda döngü de işletiliyor. Bu durum mantıksal bir hataya neden oluyor.
Neden derseniz; ilk resim/logo indirilene kadar, işletilen döngü içerisinde
LItem değişkeni defalarca eklenmiş oluyor. Yani örnek vermek gerekirse; döngü 5. adımda iken ilk logoyu, 5. kayda ekler.
Aslında olması gereken
ListItem'lar eklendikten sonra yeni Thread işlemi ile logoları almak ve ListView'de güncelleme yapmak gerekiyor.
Ayrıca oluşturduğunuz her bir Item içinde veri tabanındaki
Tv listesi Id'sini tutmalısınız. Bu durumda sonradan herhangi bir Item üzerinde rahatlıkla güncelleme (resim ekleme/düzenleme) yapabilirsiniz.