free işleminde hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

free işleminde hata

Mesaj gönderen kadirkurtoglu »

s.a. arkadaşlar formu application.create form yöntemiyle açtıktan sonra onclose olayına free kodu yazdığımda hata alıyorum. aynı kodu butona yazdığımda çalışıyor. ben bu işlemi formun kapat ikonu ile kapatmak istiyorum. butonla değil. bu konuyla bilgisi olan arkadaşlardan yardımlarını bekliyorum.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

close olayına

Kod: Tümünü seç

close;
action:=cafree;
yaz dene.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

formun ondestroy olayına yazdığımda problem yok gibi ancak bu seferde ana form kapanırken hata alıyorum...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

teşekkür edrim vedat bey bu yöntem çalıştı problem yok. kolay gelsin....
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

birde şu şekilde bir yöntem var.
formu eğer

Kod: Tümünü seç

if not assigned(form) then
begin
form:=Tform.create(self);
form.show;
end
else
form.show;
end;
bu şekilde forma bağlanırsanız eğer..
close olayına

Kod: Tümünü seç

action:=cafree;
form:=nil;
ben bu yöntemi kullanırım.sorunsuz çalışıyor.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

hocam sağolun bunlarıda deneyecem. benim yapmaya çalıştığım. programın tamamının hafızada çalışıp fazladan yer işgal etmesini engellemek. bunun için projenin kaynak kodlarından ana form haric diğer formların oluşturulma kodlarını siliyorum. daha sonra formun açılış kodu olarak.

Kod: Tümünü seç

if form2 = nil then
begin
Application.Createform(TForm2, Form2);
Form2.Show;
end else begin
Form2.Show;
end;
yapıyorum bu yöntemle formda 100 adet form varsa ve tamamı hafızada 50 mb yer kaplıyor. anaform ise 5 mb yer kaplıyor. program çalıştığında sadece anaform hafızada olduğu için sadece 5 mb bir bölüm kullanılıyor. diğer formlar show komutuyla açılıyor ve hafızaya dahil oluyor, kapandığında ise free yöntemiyle hafızadan siliniyor.. ben bu sebebten kullanma ihtiyacı hissettim. herşey için teşekkürler.....
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

kadirkurtoglu yazdı:

Kod: Tümünü seç

if form2 = nil then
begin
Application.Createform(TForm2, Form2);
Form2.Show;
end else begin
Form2.Show;
end;
CreateForm Yerine Create methodunu kullanman daha iyi. Bir de böyle alengirli bir if ifadesine gerek yok. Ben olsam şöyle yapardım.

Kod: Tümünü seç

if not Assigned(Form2) then
  Form2:= TForm2.Create(Application);
Form2.Show;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
Application.CreateForm ile yaratılan formları Release ile bırakmanız karşılaştığınız sorunlara çözüm olabilir.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

if not assigned(form) then
Burdaki assigned yöntemi forma nil atanıp atanmadığını kontrol eder.Biz formu kapatırken yukarıda yazdığım gibi nil atarsak assigned yöntemi işe yaramış olur.o yüzden forma nil atayıp action:=cafree; ile yoketmek sorunumuzu çözecektir.kolay gelsin.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Cevapla