Nesneyi Referans Bilgisiyle Yok Etmek (Çözüldü)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Nesneyi Referans Bilgisiyle Yok Etmek (Çözüldü)

Mesaj gönderen vkamadan »

Merhaba değerli üyeler ,
aşağıdaki gibi bir yapıyla bir formun n sayıda örneğini oluşturup bir TListBox ın içine AddObject ile gönderiyorum , listBox içinde arşivlediğim formlara farklı bir form içinden ulaşıp bir takım işler yaptıktan sonra işi biten formu dışarıdan yoketmek istiyorum "Geçersiz Pencere İşleci" hatası alıyorum

Kod: Tümünü seç

var
 intForm : TMyForm ;
begin
  intForm := TMyForm.Create(nil);
  GlobalListBox.items.AddObject( GenerateGUID , intForm );
end;
daha sonra bir form üzerinde işlem yapmak için list e verdiğim eşsiz değerle forma ulaşıp işlemler yapıyorum

Kod: Tümünü seç

var
 intForm : TMyForm ;
begin
  intForm := TMyForm( GlobalListBox.items.objects[ GlobalListBox.items.indexof( BilinenGUID ) ] );
    intForm.islemProc();
  ..
...
..
intForm.Free; ya da FreeAndNil(intForm) ;  yada intForm içine public olarak yerleştiridğim  self.Free çağıran bir metod.. 
end;
  
bu noktada yoketme aşamasında geçersiz pencere işleci diyor..
En son vkamadan tarafından 12 Kas 2013 10:32 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Nesneyi Referans Bilgisiyle Yok Etmek

Mesaj gönderen SimaWB »

Sizin örneğinizde intForm'u Free etmenize gerek yok. Formu değil ListBox'ın Object'ini serbest bırakmalısınız.

Kod: Tümünü seç

var
 intForm : TMyForm ;
begin
  intForm := TMyForm( GlobalListBox.items.objects[ GlobalListBox.items.indexof( BilinenGUID ) ] );
    intForm.islemProc();
  ..
...
..
  GlobalListBox.items.objects[ GlobalListBox.items.indexof( BilinenGUID ) ].Free;
  GlobalListBox.items.objects[  GlobalListBox.items.indexof( BilinenGUID ) ] := nil;
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Nesneyi Referans Bilgisiyle Yok Etmek

Mesaj gönderen vkamadan »

@SimaWB teşekkürler cevap için,
maalesef denediğim bir yöntem ,o şekildede aynı sorunu yaşıyorum, sarun sanki nesnenin kendisine hitap edemeyişimle ilgili gibi
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Nesneyi Referans Bilgisiyle Yok Etmek

Mesaj gönderen Battosai »

http://delphi.about.com/od/delphitips20 ... bjects.htm Burdaki örnekte oluşan nesne ID sine göre değilde index sırasına göre işlem yapmış. Ayrıca altında birde delphi 2009 sonrası için elemanın silinmesi yeterli denilmiş...
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Nesneyi Referans Bilgisiyle Yok Etmek

Mesaj gönderen vkamadan »

Merhabalar ,
FreeObjects tümünü yok etmek için kullanışlı, fakat ben tümünü yoketmek istemiyorum.
Bu arada normal bir VCL uygulamasında benzer kurguyu oluşturdum sorunsuz çalıştı, ancak ben Stand Alone bir web servis server uygulamasında bu uygulamayı yapmaya çalışıyorum, sanıyorum ki uygulama her isteği yeni bir kanalda açtığı (Multi Thread) için sıkıntı çıkıyor, ben her kanaldan sabit olan ana form üzerindeki metodları çalıştırıp kullanıyor olmama rağmen sorun çıkıyor, şöyle özetliyeyim, ana form üzerinde, public olarak listeye yeni form ekleyen, o form üzerinde işlem yaptıran ve formu listeden yok den metodlarım var, her istek için yeniden oluşan SOAPDataModule içinde ana formdaki metodları çalıştırıyorum yoketme aşamasına kadar hiç sıkıntı yok.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Nesneyi Referans Bilgisiyle Yok Etmek

Mesaj gönderen vkamadan »

iş parçacığı sınıflarını
TForm yerine TDataModul olarak kurguladığımda benzeri sorunu yaşamadım.
teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla