Form Kapatma Anında Free
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- osmantaskiran
- Üye
- Mesajlar: 34
- Kayıt: 17 Nis 2004 09:27
- İletişim:
Form Kapatma Anında Free
Arkadaşlar
FormAdi := TFormAdi.Create(AnaForm)
FormAdi.show
şeklinde create ettiğim formum üzerinde 50 ye yakın dbtextedit nesnesi ve 3-4 grid var.
Bu formumum close olayında;
FormAdi.Free;
komutunu uyguluyorum, formu kapattığım sırada free komutunu işletirken FormAdi adli formumum x(kaptma) düğmesine bastıktan sonra 1-2 sn bekliyor , daha sonra kapanıyor ve anaformum üzerindeki treeview nesnem 3-4 sn donuyor. FormAdi.Free komutunu kullanmaktan vezgeçtiğimde form çok hızlı kapanıyor ve herhangibir donma işlemide olmuyor. Bu sizce normal mi, donma olayını kullanıcıdan saklamak yada bu donma olayının önüne gemek için neler yapmam gerekir.
İyi çalışmalar...
FormAdi := TFormAdi.Create(AnaForm)
FormAdi.show
şeklinde create ettiğim formum üzerinde 50 ye yakın dbtextedit nesnesi ve 3-4 grid var.
Bu formumum close olayında;
FormAdi.Free;
komutunu uyguluyorum, formu kapattığım sırada free komutunu işletirken FormAdi adli formumum x(kaptma) düğmesine bastıktan sonra 1-2 sn bekliyor , daha sonra kapanıyor ve anaformum üzerindeki treeview nesnem 3-4 sn donuyor. FormAdi.Free komutunu kullanmaktan vezgeçtiğimde form çok hızlı kapanıyor ve herhangibir donma işlemide olmuyor. Bu sizce normal mi, donma olayını kullanıcıdan saklamak yada bu donma olayının önüne gemek için neler yapmam gerekir.
İyi çalışmalar...
Free edeceğin formun onclose'unda Free yapmamalısın. OnClose da bir parametre vardır. Adı Action . Onclose içinde:
Yaptığında formun kapandıktan sonra otomatik olarak free edilir.
Kod: Tümünü seç
procedure TFormun.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
- osmantaskiran
- Üye
- Mesajlar: 34
- Kayıt: 17 Nis 2004 09:27
- İletişim:
İkisi aynı şey değil. Formun handler'ı içinde Formu Free etmek ilerde başını çok ağrıtabilecek ve problemi bulmanı güçleştirecek sorunlara yol açabilir. Detayına girmiyorum. Bu yüzden Action kullanmalısın.
Bunları kullanmadığında ve çarpı ile kapattığında Formun visibility'si false oluyor. Yani formun hala bellekte ama kullanıcıya görünmez şekilde kalıyor. Bu yüzden kapanışı çok hızlı diyorsun.
Bu kadar yüklü bir formun geç kapanması normal olabilir. Çünkü Free ederken bellekten aldığını geri vermeye uğraşıyor.
Gene de Ondestroy, onclosequery veya onclose'un içine ne gibi kodlar yazdığını bilemediğimden kesin birşey diyemem. Belki bu handler lar içinde bir kodun vardır ve bu yavaşlatıcı bir etki yapıyordur.
Bu yüzden Free etmekten vazgeçip, görünmez olması ile yetinebilirsin. Zaten programdan çıkarken bu form da otomatik olarak free edilecektir.
Bunları kullanmadığında ve çarpı ile kapattığında Formun visibility'si false oluyor. Yani formun hala bellekte ama kullanıcıya görünmez şekilde kalıyor. Bu yüzden kapanışı çok hızlı diyorsun.
Bu kadar yüklü bir formun geç kapanması normal olabilir. Çünkü Free ederken bellekten aldığını geri vermeye uğraşıyor.
Gene de Ondestroy, onclosequery veya onclose'un içine ne gibi kodlar yazdığını bilemediğimden kesin birşey diyemem. Belki bu handler lar içinde bir kodun vardır ve bu yavaşlatıcı bir etki yapıyordur.
Bu yüzden Free etmekten vazgeçip, görünmez olması ile yetinebilirsin. Zaten programdan çıkarken bu form da otomatik olarak free edilecektir.
- osmantaskiran
- Üye
- Mesajlar: 34
- Kayıt: 17 Nis 2004 09:27
- İletişim:
- osmantaskiran
- Üye
- Mesajlar: 34
- Kayıt: 17 Nis 2004 09:27
- İletişim:
Merhaba,
bende aynı sdistemi kullanıyorum ve doluluk oranı sizinkine yakın fornmlarım var milisaniyelik kapanıyor... OnClose'daki kodlarım @coderlord un dediği şekilde ama aklıma takılan bişey var onu söylemeden edemeyeceğim...
Formun Create edilmesi ile alakalı;
Ben Create işleminde Anaform yerine "Application" kullanıyorum...
Bilmiyorum ben cahilim fark edermi??
bende aynı sdistemi kullanıyorum ve doluluk oranı sizinkine yakın fornmlarım var milisaniyelik kapanıyor... OnClose'daki kodlarım @coderlord un dediği şekilde ama aklıma takılan bişey var onu söylemeden edemeyeceğim...
Formun Create edilmesi ile alakalı;
Kod: Tümünü seç
FormAdi := TFormAdi.Create([b]AnaForm[/b])
FormAdi.show
Bilmiyorum ben cahilim fark edermi??
merhaba ustalarım,
küçük bi sorunum var. yaptığım iki ayrı çalışma var birinci çalışmamda uyguladığım formu create etme ve sonunda free etme olaylarında sorunsuz çalışıyor. ikinci çalışmamda ise create ettiğim bir formu kapatıp akabince açmaya çalıştığımda access violation hatası alıyorum bazı formlarda ise abstract hatası alıyorum. kullandığım yöntem şöyle. formlarım avaliab olarak ayarlı.
formu açacak olan komut düğmesinde
formun onclose yordamında
son olarak kodların en sonuna
yazıyorum. formlarımdan veri giriş formlarımda pek karışık yordam yok onactivate olayında datasetleri aktif yapıyorum onclosede kapatıyorum. gerisi verilerin post edilmesi kayıt gezintisi.
önceki diğer çalışmamda uyguladığım bu düzende sorun yaşamıyorum gayet iyi çalışoyor yeni yaptığım uygulamada bu durum niye hata veriyor acaba. nerede hata yapıyoruz.
hatayı tekrarlamak istersek. formları açıp kapatıp tekrar zaman kaybetmeden açmak istediğimizde access violation hatası ile abstract hatası alıyorum.
teşekkür ve saygılarımla
kolay gelsin
küçük bi sorunum var. yaptığım iki ayrı çalışma var birinci çalışmamda uyguladığım formu create etme ve sonunda free etme olaylarında sorunsuz çalışıyor. ikinci çalışmamda ise create ettiğim bir formu kapatıp akabince açmaya çalıştığımda access violation hatası alıyorum bazı formlarda ise abstract hatası alıyorum. kullandığım yöntem şöyle. formlarım avaliab olarak ayarlı.
formu açacak olan komut düğmesinde
Kod: Tümünü seç
if not assigned(formdemirbasgiris) then
begin
formdemirbasgiris:=tformdemirbasgiris.Create(self);
formdemirbasgiris.Show;
end
else
formdemirbasgiris.bringtofront;
Kod: Tümünü seç
ibdatasetleri kapatıyorum ve
action:=cafree;
kullanıyorum
Kod: Tümünü seç
initialization
form:=nil;
önceki diğer çalışmamda uyguladığım bu düzende sorun yaşamıyorum gayet iyi çalışoyor yeni yaptığım uygulamada bu durum niye hata veriyor acaba. nerede hata yapıyoruz.
hatayı tekrarlamak istersek. formları açıp kapatıp tekrar zaman kaybetmeden açmak istediğimizde access violation hatası ile abstract hatası alıyorum.
teşekkür ve saygılarımla
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Buna hiç gerek yok. Delphi'nin başlangıçta form değişkenine Default atadığı değer zaten nil olacaktır.olc yazdı: son olarak kodların en sonunaKod: Tümünü seç
initialization form:=nil;
Diğer konu daha fazla inceleme gerektirir. Projendeki herhangi bir formda yaptığın kodlama hatası buna sebep olabilir.
assigned fonksiyonu bir pointerin iceriginin nil olup olmamasını kontrol ediyor
yani pointer bir seyi refere ediyor, gosteriyor ise true yoksa false deger donduruyor.
sen form create ederken bu form onceden create edilmis mi diye assigned ile kontrol ediyorsun ama form kapatılırken caFree parametresi ile Free etsen dahi formdemirbasgiris degiskeninin icerigi hala nil den farklı
bu yuzden cıkısta caFree nin altına formdemirbasgiris:=nil; eklemen gerek
bunu her form icin ayrı ayrı yapmak gerek bu degiskeni kullandıgın muddetce.
yani pointer bir seyi refere ediyor, gosteriyor ise true yoksa false deger donduruyor.
sen form create ederken bu form onceden create edilmis mi diye assigned ile kontrol ediyorsun ama form kapatılırken caFree parametresi ile Free etsen dahi formdemirbasgiris degiskeninin icerigi hala nil den farklı
bu yuzden cıkısta caFree nin altına formdemirbasgiris:=nil; eklemen gerek
bunu her form icin ayrı ayrı yapmak gerek bu degiskeni kullandıgın muddetce.
ÜŞENME,ERTELEME,VAZGEÇME
gökmen ustam,
mantığı anladım sanırım. ben cafree desemde form creat olayından silinmediği için tekrar açmak istediğimde çakışma yapıyor ve hata mesajı veriyor. cafree den sonra form:=nil komutunu yazarsam düzelir inşeallah. şu an deneyemedim deneyince sonucu bildiririm.
burada analayamadığım önceki çalışmamda bu komutlar çalışırken yeni çalışmamda hata vermesi. buradada sanırım bi kodlama hatası yapıyor olabilirim birde aklıma şimdi şu geldi önceki uygulamamda kodlar çalışıyor fakat tablolarda sp ve trigger olayları yok. bu yeni çalışmamda bunlar var. ne kadar etkili olur bilemiyorum ama yinede yardımın için teşekkürler
kolay gelsin
mantığı anladım sanırım. ben cafree desemde form creat olayından silinmediği için tekrar açmak istediğimde çakışma yapıyor ve hata mesajı veriyor. cafree den sonra form:=nil komutunu yazarsam düzelir inşeallah. şu an deneyemedim deneyince sonucu bildiririm.
burada analayamadığım önceki çalışmamda bu komutlar çalışırken yeni çalışmamda hata vermesi. buradada sanırım bi kodlama hatası yapıyor olabilirim birde aklıma şimdi şu geldi önceki uygulamamda kodlar çalışıyor fakat tablolarda sp ve trigger olayları yok. bu yeni çalışmamda bunlar var. ne kadar etkili olur bilemiyorum ama yinede yardımın için teşekkürler
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
