Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 4.33/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Kasmadan resim indirme [ÇÖZÜLDÜ]
#21
(03-01-2017, Saat: 16:02)Fesih ARSLA Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kod ismi dediğiniz değer, Integer ise TListViewItem.Tag özelliğine, metinsel bir değer ise TListViewItem.ButtonText özelliğine atayabilirsiniz.

Tamam teşekkürler Fesih bey. Resim indirmeni çözeyim önce. Bu arada listede Thread bileşeni var. Bu bileşen thread işlemi kolay bir şekilde yapa bilirmiyim acaba?
WWW
Cevapla
#22
(03-01-2017, Saat: 16:12)AliZairov Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(03-01-2017, Saat: 16:02)Fesih ARSLA Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Kod ismi dediğiniz değer, Integer ise TListViewItem.Tag özelliğine, metinsel bir değer ise TListViewItem.ButtonText özelliğine atayabilirsiniz.

Tamam teşekkürler Fesih bey. Resim indirmeni çözeyim önce. Bu arada listede Thread bileşeni var. Bu bileşen thread işlemi kolay bir şekilde yapa bilirmiyim acaba?

Resim indirme işlemlerini yeni Thread interface'leri (Modern Object Pascal/Parallel Programming ) ile yapabilirsiniz. Bu yeni yapı ile komplex thread yapısı, daha anlaşılır ve sade hale getirilmiştir.

Sizin oluşturmak istediğiniz sisteme örnek vermek gerekirse;

procedure SetLogoIndirVeListeyiDuzenle();
var
 thread: TThread;
begin
 thread := TThread.CreateAnonymousThread(
   procedure
   var
     Http: TIdHttp;
     MS: TMemoryStream;
   begin
     MS := TMemoryStream.Create;
     Http := TIdHttp.Create(nil);
     try
       try
         Http.Get('http://www.delphican.com/images/duyuru/delphican.png',MS);
         TThread.Synchronize(TThread.CurrentThread,
           procedure()
           begin
            //ListView'de ilgili Id'yi bul ve bu Id'ye ait ImageListItem'a Assign işlemi yap.
           end);
       except
         MS.Free;
       end;
     finally
       Http.Free;
     end;
   end);
 thread.start;
end;

Not: Metod'a logo linki ve Id değerlerini dinamik olarak gönderirsiniz.


Thread.start; satırından hemen önce kullanmış olduğum  thread.FreeOnTerminate := true; direktifi sildim. Bu metodun varsayılan değeri True'imiş zaten. Uyarısı için @SimaWB'e teşekkür ederim.

Öğretirken de öğreniyoruz. Smile
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#23
AnonymousThread için değişken tanımlamadan (Delphi'nin yeniliklerinden faydalanmak adına):
TThread.CreateAnonymousThread().Start;
şeklinde de kullanabiliriz.
There's no place like 127.0.0.1
WWW
Cevapla
#24
(03-01-2017, Saat: 17:23)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.AnonymousThread için değişken tanımlamadan (Delphi'nin yeniliklerinden faydalanmak adına):
TThread.CreateAnonymousThread().Start;
şeklinde de kullanabiliriz.

Biraz ara vermiştim. Baya kafam karışmış durumda. Önce listeye belirli bir ikon ile listeye eklensin mi? Sonra bu güncelleme olayını yapmam gerekiyor o zaman?
WWW
Cevapla
#25
Konunun tamamını okuyamadım ama şöyle bir sıkıntı yaşanması mühtemel.  Thread içinde yaptığınız bağlantılar senkron veya asenkron çalışabilir ama ayrı bir class olarak tanımlanmadığı sürece tam anlamıyla 2. bir program gibi çalışmayacak ve connect olmaya çalıştığı durumlarda donmalara sebep olacaktır. Bence yolun başındayken Thread sınıfınızı tanımlamanızda fayda olduğunu düşünüyorum..
Cevapla
#26
İyi akşamlar. Yarımlarınız için herkese teşekkür ediyorum. Fesih abi kodu method yaptım kasmadan güzel bir şekilde işlem yapıldı.

  procedure setLogo(ListView: TListView; url: string; id: Integer);
  var
  T: TThread;
 begin
   T := TThread.CreateAnonymousThread(
   procedure
   var
     HTTP: TIdHTTP;
     MS: TMemoryStream;
   begin
     MS := TMemoryStream.Create;
     HTTP := TIdHTTP.Create(nil);
     try
       try
         HTTP.Get(url, MS);
         TThread.Synchronize(TThread.CurrentThread,
           procedure()
           begin
             ListView.Items[id].Bitmap.LoadFromStream(MS);
           end);
       except
         MS.Free;
       end;
     finally
       HTTP.Free;
     end;
   end);
   T.start;
 end;

Buda liste ekleme kod parçam. Fonksiyonu içine gömdüm.

procedure TDM.AddList(ListView: TListView; Query: TFDQuery);
  procedure setLogo(ListView: TListView; url: string; id: Integer);
 var
  T: TThread;
 begin
   T := TThread.CreateAnonymousThread(
   procedure
   var
     HTTP: TIdHTTP;
     MS: TMemoryStream;
   begin
     MS := TMemoryStream.Create;
     HTTP := TIdHTTP.Create(nil);
     try
       try
         HTTP.Get(url, MS);
         TThread.Synchronize(TThread.CurrentThread,
           procedure()
           begin
             ListView.Items[id].Bitmap.LoadFromStream(MS);
           end);
       except
         MS.Free;
       end;
     finally
       HTTP.Free;
     end;
   end);
   T.start;
 end;
var
 I: Integer;
 LItem: TListViewItem;
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;
   LItem.ImageIndex := I;
   setLogo(ListView, Query.FieldByName('image').Text, I);
   LItem.Text := Query.FieldByName('name').Text;
   LItem.Detail := Query.FieldByName('code').Text;
   Query.Next;
 end;
 ListView.EndUpdate;
 Query.Active := False;
end;
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [Çözüldü] FMX VLC Player Desteği CesuR 10 1.365 09-11-2019, Saat: 15:02
Son Yorum: ikurt07
  Android read_contacts izini sorunu [COZULDU] codder71 3 264 25-09-2019, Saat: 22:32
Son Yorum: codder71
  listview resim çekme theercan 0 190 29-07-2019, Saat: 10:48
Son Yorum: theercan
  [Çözüldü]Müşterilerin siparişleri tek isimde görünsün hakanharbeli 4 587 04-06-2019, Saat: 11:55
Son Yorum: FiRewaLL
  Resim Ortlama Problemi zihnidede 5 554 03-05-2019, Saat: 16:30
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi