Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TBitmap No Safe Thread Sorunu
#1
Merhaba Arkadaşlar

Uzun zamandır üzerinde çalıştığım uygulamam için bir dosya yönetici yapmaktayım. Kullanıcıya kolaylık sağlamak için Thumbnail tarzı bir yapı üzerinde çalışıyorum. Bunu sağlamak içinde TBitmap class'ını kullanmak istedim yalnız bu nesneyi thread içinde kullandığım zaman uygulama işlem sırasında kapanıyor. Araştırmam sonucu no safe thread olduğunu farkettim ve yabancı formlarda da bu tarz sorular geldiğinide gördüm ve bi kaçta örnek buldum ama sonuç alamadım. Sizce bu  durumda ne yapmam lazım.  Safe Thread olan başka bir yöntem var mı ? yada TBitmap Nesnesini safe thread kullanmanın bir yolu varmı ? Yardımlarınız  bekliyorum. Şimdiden cevaplarınız için teşekkürler ederim.
Cevapla
#2
(05-04-2017, Saat: 14:09)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba Arkadaşlar

Uzun zamandır üzerinde çalıştığım uygulamam için bir dosya yönetici yapmaktayım. Kullanıcıya kolaylık sağlamak için Thumbnail tarzı bir yapı üzerinde çalışıyorum. Bunu sağlamak içinde TBitmap class'ını kullanmak istedim yalnız bu nesneyi thread içinde kullandığım zaman uygulama işlem sırasında kapanıyor. Araştırmam sonucu no safe thread olduğunu farkettim ve yabancı formlarda da bu tarz sorular geldiğinide gördüm ve bi kaçta örnek buldum ama sonuç alamadım. Sizce bu  durumda ne yapmam lazım.  Safe Thread olan başka bir yöntem var mı ? yada TBitmap Nesnesini safe thread kullanmanın bir yolu varmı ? Yardımlarınız  bekliyorum. Şimdiden cevaplarınız için teşekkürler ederim.

Aynı TBitmap nesnesini ve aynı dosyayı ortak kullanacak thread'ler yok ise istediğinizi yapabilmeniz biraz daha kolaylaşıyor. Öncelikle thread içinde ilgili dosyadan okumanızı yapıp local bir TBitmap instance'ına doldurabilirsiniz resmi. İşin sıkıntılı kısmı ile VCL nesneleri ile çalışırken karşılaşacaksınız. TImage.Picture.Assign gibi bir işlem yapıyor olacaksınız sanırım. Bu durumda da senkronizasyon sağlamanız gerekecek. Bunun için de TThread.Queue kullanmanız yerinde olabilir.

 Aslına bakarsanız önce siz bir girişimde bulunun bir şeyler yapın, yaptıklarınızı da paylaşın. Sonra sıkıntılara ortak bir çözüm bulunur burada.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
(05-04-2017, Saat: 14:39)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(05-04-2017, Saat: 14:09)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba Arkadaşlar

Uzun zamandır üzerinde çalıştığım uygulamam için bir dosya yönetici yapmaktayım. Kullanıcıya kolaylık sağlamak için Thumbnail tarzı bir yapı üzerinde çalışıyorum. Bunu sağlamak içinde TBitmap class'ını kullanmak istedim yalnız bu nesneyi thread içinde kullandığım zaman uygulama işlem sırasında kapanıyor. Araştırmam sonucu no safe thread olduğunu farkettim ve yabancı formlarda da bu tarz sorular geldiğinide gördüm ve bi kaçta örnek buldum ama sonuç alamadım. Sizce bu  durumda ne yapmam lazım.  Safe Thread olan başka bir yöntem var mı ? yada TBitmap Nesnesini safe thread kullanmanın bir yolu varmı ? Yardımlarınız  bekliyorum. Şimdiden cevaplarınız için teşekkürler ederim.

Aynı TBitmap nesnesini ve aynı dosyayı ortak kullanacak thread'ler yok ise istediğinizi yapabilmeniz biraz daha kolaylaşıyor. Öncelikle thread içinde ilgili dosyadan okumanızı yapıp local bir TBitmap instance'ına doldurabilirsiniz resmi. İşin sıkıntılı kısmı ile VCL nesneleri ile çalışırken karşılaşacaksınız. TImage.Picture.Assign gibi bir işlem yapıyor olacaksınız sanırım. Bu durumda da senkronizasyon sağlamanız gerekecek. Bunun için de TThread.Queue kullanmanız yerinde olabilir.

 Aslına bakarsanız önce siz bir girişimde bulunun bir şeyler yapın, yaptıklarınızı da paylaşın. Sonra sıkıntılara ortak bir çözüm bulunur burada.
Merhabalar

Hocam öncelikle cevabınız için teşekkür ederim. Hocam aslında yapmak istediğim basit bir işlem bir listview'im var bunla cihazdaki dosyalar listeliyorum ve dosya türüne göre uygulamanın içine gömdüğüm simgeleri listview bitmapa bağlıyorum. Sadece image türündeki listelenen dosyaları Thumbnail gibi küçük simgeler halinde listview kenarına almak istiyorum. Hocam şuan için örnek kodlarımı ekleyemeyeceğim çünkü evde değilim ama akşam eve geçtiğim zaman kodları da yüklerim.
Cevapla
#4
Hocam kullandığım kodları paylaşıyorum.

Resim thread kodları :

constructor TResimKucult.create(yol : string);
begin
FreeOnTerminate:=true;
isim:=yol;
inherited Create (False);
end;


procedure TResimKucult.bagla;
var
index:integer;
begin
index:=form4.ListBox3.Items.IndexOf(ExtractFileName(isim));
form4.ListView1.Items[index].Bitmap:=resim;
end;


procedure TResimKucult.Execute;
begin
 inherited;
 try
   resim := TBitmap.CreateFromFile(isim);
   Synchronize(bagla);
   while not Terminated do
   begin
     Sleep(100);
   end;
   resim.Free;
 except
   on E:Exception do
   begin
     Log.d('Thread Hatası: ' + E.message);
   end;
 end;

end;


Tetiklediğim Bölüm :

.
.
.
.
.
end
else
if (Dosya_uzantisi = '.jpg') or (Dosya_uzantisi = '.jpeg') or (Dosya_uzantisi = '.tiff')  //Buraya Küçük Resimler Eklenecek
or (Dosya_uzantisi = '.gif') or (Dosya_uzantisi = '.bmp') or (Dosya_uzantisi = '.psd')
or (Dosya_uzantisi = '.eps') or (Dosya_uzantisi = '.raw') or (Dosya_uzantisi = '.tif')
or (Dosya_uzantisi = '.png') then
begin
Synchronize(image);
TResimKucult.create(dosya_yolu);
end
else
.
.


Hocam threadın adından da anlaşılacağı gibi önce imageleri küçültmeye çalıştım ama hiç bir şekilde olmadı zaten olayın threaden kaynaklandığını öğrenince başka şeyler denedim.
Cevapla
#5
Gördüğüm kadarı ile thread kodlarınızda sıkıntı var. FMX'e nispeten aşina olmamakla birlikte, Bagla metodunuzun içindeki kodun ..Bitmap := ... yerine; ..Bitmap.Assign biçiminde olması gerektiğini düşünüyorum. Ayrıca, Sycnhronize ile çağrım yaptığınız için aslında yapmış olduğunuz iş ana thread'de yapılıyor demektir. Queue kullanabilirsiniz, biraz daha efektif olur.

Ayrıca neden while not Terminated döngüsü içinde 100 milisaniye beklediğinizi anlamadım. Synchronize, Queue vb şeylerle uğraşmayayım daha basit halledeyim derseniz eğer, TResimKucult.Execute içinde bir TBitmap yerel değişkeni tanımlayın, bunu Create edin, dosyadan içine resim yükleyin, ardından PostMessage(Formunuz.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap)); yolu ile de ana thread'in kuyruğuna bir veri gönderebilirsiniz.

Kısaca;


const
  WM_RESIM_YUKLENDI = WM_USER + $1234;

type
 TForm1 = class(TForm)
 private
   procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;
 public
 end;

procedure TForm1.WMResimYuklendi(var Message: TMessage);
var
 ABitmap : TBitmap;
begin
 if Pointer(Message.LParam) <> nil then
 begin
   ABitmap := TBitmap(Message.LParam);

   try
     // Burada ListBox'ın ilgili itemine resmi atayabilirsiniz.
     // Assign ile atamanızı tavsiye ederim.
   finally
     ABitmap.Free;
   end;
 end;
end;

 TThread.CreateAnonymousThread(
   procedure
   var
     ABitmap : TBitmap;
   begin
     ABitmap := TBitmap.Create;
     ABitmap.LoadFromFile('Dosyaniz.bmp');
     PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));
     // Bu noktada ABitmap'ı Free etmiyoruz buraya dikkat.!
   end
 ).Start;

gibi bir kullanımınız olabilir. Sorun yaşadığınız bir husus olur ise bu konu üzerinden yazışmaya devam ederiz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
(06-04-2017, Saat: 14:41)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlGördüğüm kadarı ile thread kodlarınızda sıkıntı var. FMX'e nispeten aşina olmamakla birlikte, Bagla metodunuzun içindeki kodun ..Bitmap := ... yerine; ..Bitmap.Assign biçiminde olması gerektiğini düşünüyorum. Ayrıca, Sycnhronize ile çağrım yaptığınız için aslında yapmış olduğunuz iş ana thread'de yapılıyor demektir. Queue kullanabilirsiniz, biraz daha efektif olur.

Ayrıca neden while not Terminated döngüsü içinde 100 milisaniye beklediğinizi anlamadım. Synchronize, Queue vb şeylerle uğraşmayayım daha basit halledeyim derseniz eğer, TResimKucult.Execute içinde bir TBitmap yerel değişkeni tanımlayın, bunu Create edin, dosyadan içine resim yükleyin, ardından PostMessage(Formunuz.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap)); yolu ile de ana thread'in kuyruğuna bir veri gönderebilirsiniz.

Kısaca;


const
  WM_RESIM_YUKLENDI = WM_USER + $1234;

type
 TForm1 = class(TForm)
 private
   procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;
 public
 end;

procedure TForm1.WMResimYuklendi(var Message: TMessage);
var
 ABitmap : TBitmap;
begin
 if Pointer(Message.LParam) <> nil then
 begin
   ABitmap := TBitmap(Message.LParam);

   try
     // Burada ListBox'ın ilgili itemine resmi atayabilirsiniz.
     // Assign ile atamanızı tavsiye ederim.
   finally
     ABitmap.Free;
   end;
 end;
end;

 TThread.CreateAnonymousThread(
   procedure
   var
     ABitmap : TBitmap;
   begin
     ABitmap := TBitmap.Create;
     ABitmap.LoadFromFile('Dosyaniz.bmp');
     PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));
     // Bu noktada ABitmap'ı Free etmiyoruz buraya dikkat.!
   end
 ).Start;

gibi bir kullanımınız olabilir. Sorun yaşadığınız bir husus olur ise bu konu üzerinden yazışmaya devam ederiz.

Merhabalar

Hocam bu örnekte verdiğim kodu stackowerflowdan aldım. Orda soruyu soran kişi sorunu bu şekilde çözmüş olduğunu söyledi aslında o while kodunu neden koyduğunu bende anlamadım.  Smile 
Düzenlediğiniz kodları denedim yalnız hatalar alıyorum.
Bu kısım tanımlanamıyor. Ayrıca Delphi Androidde Postmessage kullanılabiliyor mu onu bilmiyorum.
PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));

Bu kısımda ise WM_USER ve TMessage kısımları tanımlanamıyor. 
  WM_RESIM_YUKLENDI = WM_USER + $1234;

procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;

Ayrıca hocam bu TThread.CreateAnonymousThread şeklinde thread tanımlayıp içinde Tbitmap oluşturmuşsunuz ben bunu denedim yalnız bu şekilde de deneme yaptığımız zaman yine hata alıyorum uygulama cihazda işlem sırasında kapanıyor. Delphi 7de TBitmap Safe Threaddi neden bunu fmx de no safe thread yaptılar anlamış değilim.  Dodgy
Cevapla
#7
(06-04-2017, Saat: 15:49)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(06-04-2017, Saat: 14:41)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlGördüğüm kadarı ile thread kodlarınızda sıkıntı var. FMX'e nispeten aşina olmamakla birlikte, Bagla metodunuzun içindeki kodun ..Bitmap := ... yerine; ..Bitmap.Assign biçiminde olması gerektiğini düşünüyorum. Ayrıca, Sycnhronize ile çağrım yaptığınız için aslında yapmış olduğunuz iş ana thread'de yapılıyor demektir. Queue kullanabilirsiniz, biraz daha efektif olur.

Ayrıca neden while not Terminated döngüsü içinde 100 milisaniye beklediğinizi anlamadım. Synchronize, Queue vb şeylerle uğraşmayayım daha basit halledeyim derseniz eğer, TResimKucult.Execute içinde bir TBitmap yerel değişkeni tanımlayın, bunu Create edin, dosyadan içine resim yükleyin, ardından PostMessage(Formunuz.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap)); yolu ile de ana thread'in kuyruğuna bir veri gönderebilirsiniz.

Kısaca;


const
  WM_RESIM_YUKLENDI = WM_USER + $1234;

type
 TForm1 = class(TForm)
 private
   procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;
 public
 end;

procedure TForm1.WMResimYuklendi(var Message: TMessage);
var
 ABitmap : TBitmap;
begin
 if Pointer(Message.LParam) <> nil then
 begin
   ABitmap := TBitmap(Message.LParam);

   try
     // Burada ListBox'ın ilgili itemine resmi atayabilirsiniz.
     // Assign ile atamanızı tavsiye ederim.
   finally
     ABitmap.Free;
   end;
 end;
end;

 TThread.CreateAnonymousThread(
   procedure
   var
     ABitmap : TBitmap;
   begin
     ABitmap := TBitmap.Create;
     ABitmap.LoadFromFile('Dosyaniz.bmp');
     PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));
     // Bu noktada ABitmap'ı Free etmiyoruz buraya dikkat.!
   end
 ).Start;

gibi bir kullanımınız olabilir. Sorun yaşadığınız bir husus olur ise bu konu üzerinden yazışmaya devam ederiz.

Merhabalar

Hocam bu örnekte verdiğim kodu stackowerflowdan aldım. Orda soruyu soran kişi sorunu bu şekilde çözmüş olduğunu söyledi aslında o while kodunu neden koyduğunu bende anlamadım.  Smile 
Düzenlediğiniz kodları denedim yalnız hatalar alıyorum.
Bu kısım tanımlanamıyor. Ayrıca Delphi Androidde Postmessage kullanılabiliyor mu onu bilmiyorum.
PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));

Bu kısımda ise WM_USER ve TMessage kısımları tanımlanamıyor. 
  WM_RESIM_YUKLENDI = WM_USER + $1234;

procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;

Ayrıca hocam bu TThread.CreateAnonymousThread şeklinde thread tanımlayıp içinde Tbitmap oluşturmuşsunuz ben bunu denedim yalnız bu şekilde de deneme yaptığımız zaman yine hata alıyorum uygulama cihazda işlem sırasında kapanıyor. Delphi 7de TBitmap Safe Threaddi neden bunu fmx de no safe thread yaptılar anlamış değilim.  Dodgy

Uygulamanızın Android olduğunu söylemediğiniz için bu şekilde bir örnek vermiştim. Android ise tabii PostMessage ile yapamayacaksınız. Bu durumda PostMessage gördüğünüz yerde TThread.Queue kullanmanız aynı etkiyi almanız için yeterli olur. Evet anonim bir thread içinde bir bitmap oluşturdum ve yükleme işini orada yaptım.

Siz kodunuzu TThread.Queue haline getirmeye çalışın bir deneme uygulamasında, sonra bir hata alır iseniz adım adım yardımcı olmaya çalışalım.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
(05-04-2017, Saat: 14:09)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba Arkadaşlar

Uzun zamandır üzerinde çalıştığım uygulamam için bir dosya yönetici yapmaktayım. Kullanıcıya kolaylık sağlamak için Thumbnail tarzı bir yapı üzerinde çalışıyorum. Bunu sağlamak içinde TBitmap class'ını kullanmak istedim yalnız bu nesneyi thread içinde kullandığım zaman uygulama işlem sırasında kapanıyor. Araştırmam sonucu no safe thread olduğunu farkettim ve yabancı formlarda da bu tarz sorular geldiğinide gördüm ve bi kaçta örnek buldum ama sonuç alamadım. Sizce bu  durumda ne yapmam lazım.  Safe Thread olan başka bir yöntem var mı ? yada TBitmap Nesnesini safe thread kullanmanın bir yolu varmı ? Yardımlarınız  bekliyorum. Şimdiden cevaplarınız için teşekkürler ederim.
İyi akşamlar. Ben bu Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol arkadaşların yardımı ile netden kasmadan resim indirip asenkron bir şekilde listede gösteriyordum. Kodlara bakın belki işinize yarıya bilir. FMX için kullanmıştım. Win, Mac ve Android için kullanıyorum bunu.
WWW
Cevapla
#9
(06-04-2017, Saat: 22:51)AliZairov Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(05-04-2017, Saat: 14:09)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba Arkadaşlar

Uzun zamandır üzerinde çalıştığım uygulamam için bir dosya yönetici yapmaktayım. Kullanıcıya kolaylık sağlamak için Thumbnail tarzı bir yapı üzerinde çalışıyorum. Bunu sağlamak içinde TBitmap class'ını kullanmak istedim yalnız bu nesneyi thread içinde kullandığım zaman uygulama işlem sırasında kapanıyor. Araştırmam sonucu no safe thread olduğunu farkettim ve yabancı formlarda da bu tarz sorular geldiğinide gördüm ve bi kaçta örnek buldum ama sonuç alamadım. Sizce bu  durumda ne yapmam lazım.  Safe Thread olan başka bir yöntem var mı ? yada TBitmap Nesnesini safe thread kullanmanın bir yolu varmı ? Yardımlarınız  bekliyorum. Şimdiden cevaplarınız için teşekkürler ederim.
İyi akşamlar. Ben bu Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol arkadaşların yardımı ile netden kasmadan resim indirip asenkron bir şekilde listede gösteriyordum. Kodlara bakın belki işinize yarıya bilir. FMX için kullanmıştım. Win, Mac ve Android için kullanıyorum bunu.

Merhabalar

Cevabınız için çok teşekkür ederim. Kodları kendime göre uyarladım uygulamanın kapanmasını önledim yalnız uygulamanın kasmasının önüne geçemedim maalesef.  Kodları paylaşıyorum. 

constructor TResimKucult.create(yol: string);
begin
  FreeOnTerminate := true;
  isim := yol;
  inherited create(False);
end;

procedure TResimKucult.Execute;
var
  ms: TMemoryStream;
  index: integer;
begin
  ms := TMemoryStream.create;
  ms.LoadFromFile(isim);
  TThread.Synchronize(TThread.CurrentThread,
    procedure()
    var
      resim: TBitmap;
    begin
      resim := TBitmap.CreateFromStream(ms);
      resim.Resize(resim.Width div 100, resim.Height div 100);
      // Resmi resize yaptığım zaman uygulama kapanmıyor.
      index := form4.ListBox3.Items.IndexOf(ExtractFileName(isim));
      form4.ListView1.Items[index].Bitmap.Assign(resim);
      resim.Free;
    end);
  ms.Free;
  Sleep(0);
end;
Cevapla
#10
(06-04-2017, Saat: 16:43)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(06-04-2017, Saat: 15:49)codder71 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhabalar

Hocam bu örnekte verdiğim kodu stackowerflowdan aldım. Orda soruyu soran kişi sorunu bu şekilde çözmüş olduğunu söyledi aslında o while kodunu neden koyduğunu bende anlamadım.  Smile 
Düzenlediğiniz kodları denedim yalnız hatalar alıyorum.
Bu kısım tanımlanamıyor. Ayrıca Delphi Androidde Postmessage kullanılabiliyor mu onu bilmiyorum.
PostMessage(Form1.Handle, WM_RESIM_YUKLENDI, 0, NativeInt(ABitmap));

Bu kısımda ise WM_USER ve TMessage kısımları tanımlanamıyor. 
  WM_RESIM_YUKLENDI = WM_USER + $1234;

procedure WMResimYuklendi(var Message : TMessage); message WM_RESIM_YUKLENDI;

Ayrıca hocam bu TThread.CreateAnonymousThread şeklinde thread tanımlayıp içinde Tbitmap oluşturmuşsunuz ben bunu denedim yalnız bu şekilde de deneme yaptığımız zaman yine hata alıyorum uygulama cihazda işlem sırasında kapanıyor. Delphi 7de TBitmap Safe Threaddi neden bunu fmx de no safe thread yaptılar anlamış değilim.  Dodgy

Uygulamanızın Android olduğunu söylemediğiniz için bu şekilde bir örnek vermiştim. Android ise tabii PostMessage ile yapamayacaksınız. Bu durumda PostMessage gördüğünüz yerde TThread.Queue kullanmanız aynı etkiyi almanız için yeterli olur. Evet anonim bir thread içinde bir bitmap oluşturdum ve yükleme işini orada yaptım.

Siz kodunuzu TThread.Queue haline getirmeye çalışın bir deneme uygulamasında, sonra bir hata alır iseniz adım adım yardımcı olmaya çalışalım.
Merhabalar

TThread.Queue ilgili şöyle bir deneme yaptım uygulamada kasma yok ama nedense resimlerde yüklenmiyor. Sebebi nedir acaba ?? 

constructor TResimKucult.create(yol : string);
begin
FreeOnTerminate:=true;
isim:=yol;
inherited Create (False);
end;

procedure TResimKucult.bagla;
var
resim:TBitmap;
index:integer;
begin
resim:=TBitmap.Create;
resim.LoadFromFile(isim);
index:=form4.ListBox3.Items.IndexOf(ExtractFileName(isim));
form4.ListView1.Items[index].Bitmap.Assign(resim);
resim.Free;
end;


procedure TResimKucult.Execute;
begin
Queue(nil,bagla);
end;
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  datasnap Mobil İnternet bağlantı sorunu hakanharbeli 9 202 19-02-2018, Saat: 08:36
Son Yorum: hakanharbeli
  Uygulama linki paylaşma sorunu [ÇÖZÜLDÜ] codder71 2 99 30-01-2018, Saat: 23:38
Son Yorum: codder71
  Listview image değiştirme sorunu serhat 6 210 28-01-2018, Saat: 13:01
Son Yorum: serhatil
Question başka APK dosyasının üzerine yükleme sorunu BY-HAYALET 7 125 26-01-2018, Saat: 13:15
Son Yorum: BY-HAYALET
  Video Screenshot sorunu codder71 5 153 25-01-2018, Saat: 01:46
Son Yorum: codder71



Konuyu Okuyanlar: 1 Ziyaretçi