Merhaba arkadaşlar.
Çok garip bir problemle karşı karşıya kaldım.
Üzerinde çalıştığım bir projem var projenin içerisinde bir sürü formlarım var.
Formlardan birinde global bir değişken var. Duruma göre içerisine vet hayır gibi ifadeler gönderiyorum. Programı işletiyorum
değişkenin ifadesine göre çeşitli işlemler yapıyorum vs. sayfayı kapatıyorum sayfa kapanırken "action:=cafree;" ifadesinide çalıştırıyorum (formun onclose olayında)
Tekrar sayfayı açıyorum değişkenin içine bir bakıyorumki enson verdiğim ifade duruyor. Bu nasıl olabiliyor ki. Ben formu kapattığımda cafree de yapmama rağmen
değişken nasıl silinmiyor.
Sayfa kapandığında değişkenlerin içi silnmiyor.
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
Aynı değişken başka formda olabilir.
o formuda sen bu forma tanıtmışsındır.
o formuda sen bu forma tanıtmışsındır.
Bir kelimenin anlamını öğretsen bile yeter..



Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
action := caFree;
Form1 := nil;
silinmesi lazim
Form1 := nil;
silinmesi lazim
kıdemsiz üye
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
Bende öyle düşünmüştüm ama aynı değişkenden başka hiçbir formda yok.conari yazdı:Aynı değişken başka formda olabilir.
o formuda sen bu forma tanıtmışsındır.
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
Global değişken formun içinde tanımlanmış bir değişken mi, yoksa unit içinde tanımlanmış bir değişkenmi?
Eğer formun içinde tanımlıysa, formla birlikte hafızaya açılır ve formla birlikte silinir.
Unit içinde tanımlı bir değişkense, program açık olduğu sürece değişken geçerlidir ve formdan bağımsızdır.
Aşagıda strform1 forma bağlı değişken, strunit1 ise unite baglı değişken.
Eğer formun içinde tanımlıysa, formla birlikte hafızaya açılır ve formla birlikte silinir.
Unit içinde tanımlı bir değişkense, program açık olduğu sürece değişken geçerlidir ve formdan bağımsızdır.
Aşagıda strform1 forma bağlı değişken, strunit1 ise unite baglı değişken.
Kod: Tümünü seç
unit
interfacee
type
TForm1 = class(TForm)
......
public
strform1 : string;
end;
var
strunit1 : string;
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
s.a.
global olarak tanımladım dediğiniz değişkeni tam olarak nerede tanımladınız.
muhtemelen interface bloğunda ve FXXXXX=TFXXXXX in altında veya üsütünde.
dolayısıyla sizin tanımladığınız global değişken FXXXXX in içinde değil UnitXXXXX in içinde. FXXXXX UnitXXXXX in içindeki bir sınıftan türetilmiş bir nesne değişkeniniz ise UnitXXXX in içinde tanımlamış olduğunuz bir değişken. dolayısı ile değişkeniniz ile FXXXX arasında aynı ünit te tanımlanmış olmaları dışında bir bağlantı yok. Nasıl FXXXXX i create etmeden önce değişkene değer atıyabiliyorsanız FXXXX i free ettikten sonrada değer atıyabilirsiniz.
Yukarısı biraz karışık olmuş olabilir. şöyle bir örnek vereyim.
Bir oda düşünün (UnitXXXX) içinde bir masa (FXXXXX) ve bir sepet (değişkeniniz) var. dikkat edin sepet masanın üzerinde değil odanın içinde. siz masayı kırdığınız zaman sepet orada duruyor değilmi? Ama masanın üstündekiler gitti.
bunun gibi bir durum.
umarım anlatabilmişimdir.
kolay gelsin.
global olarak tanımladım dediğiniz değişkeni tam olarak nerede tanımladınız.
muhtemelen interface bloğunda ve FXXXXX=TFXXXXX in altında veya üsütünde.
dolayısıyla sizin tanımladığınız global değişken FXXXXX in içinde değil UnitXXXXX in içinde. FXXXXX UnitXXXXX in içindeki bir sınıftan türetilmiş bir nesne değişkeniniz ise UnitXXXX in içinde tanımlamış olduğunuz bir değişken. dolayısı ile değişkeniniz ile FXXXX arasında aynı ünit te tanımlanmış olmaları dışında bir bağlantı yok. Nasıl FXXXXX i create etmeden önce değişkene değer atıyabiliyorsanız FXXXX i free ettikten sonrada değer atıyabilirsiniz.
Yukarısı biraz karışık olmuş olabilir. şöyle bir örnek vereyim.
Bir oda düşünün (UnitXXXX) içinde bir masa (FXXXXX) ve bir sepet (değişkeniniz) var. dikkat edin sepet masanın üzerinde değil odanın içinde. siz masayı kırdığınız zaman sepet orada duruyor değilmi? Ama masanın üstündekiler gitti.

bunun gibi bir durum.
umarım anlatabilmişimdir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
emin-as ve aslangeri hocam. Anlattıklarınızdan delphide yeni birşey daha öğrenmiş oldum. Öncelikle sizlere teşekür ederim.
Anladıklarımın üzerine hemen sorularıma geçeyim
1- Değişkenimi public altında tanımladığımda o değişkeni formun içerisindeki bütün procedure'ler den erişebiliyormuyum.
2- Public atına açtığım değişkene diğer formlardan erişebiliyormuyum.
3- Normalde benim açtığım gibi değişkeni açsam (formun en üstteki var altına) sonra bunu free etmenin bir yolu varmıdır. (Meraktan soruyorum)
Tekrar tekrar teşekür ederim.
Anladıklarımın üzerine hemen sorularıma geçeyim

1- Değişkenimi public altında tanımladığımda o değişkeni formun içerisindeki bütün procedure'ler den erişebiliyormuyum.
2- Public atına açtığım değişkene diğer formlardan erişebiliyormuyum.
3- Normalde benim açtığım gibi değişkeni açsam (formun en üstteki var altına) sonra bunu free etmenin bir yolu varmıdır. (Meraktan soruyorum)
Tekrar tekrar teşekür ederim.
Re: Sayfa kapandığında değişkenlerin içi silnmiyor.
Protected
eğişkene sadece o class( burada classımız form oluyor) içinde erişebilirsiniz. Class'dan başka bir class türettiğinizde türetilen class bu değişkene erişemez..
Private
eğşkene sadece o class içinde erişebilirsiniz. O classdan başka bir class türettiğinizde türetilen class da bu değişkene erişebilir. Ancak diğer classlar erişemez.
Public: değişkene o classdan ya da programın herhangi bir yerindn erişenbilirsiniz (global değişken)
bu classdan türetilen nesne destroy edildiğinde dolayısı ile buna üye olan değişkenler de destroy edilmiş olur.
Class tanımı dışıında (altında ya da üstünde) olan değişkenler eğer nesne değiller ise destroy edilemez.
Ancak varsayılan değerlerine getirebilirsiniz. ( Hoş, integer için ne verirseniz verin bellekte kapladığı yer gene aynıdır (packed denilmemiş ise) )
String='', Integer=0 veya -1 gibi.
ama gene de class dışında tanımlı global değişkenlerden hem programın selahiyeti açısından hem de bellek açısından kaçınmakta fayda var.

Private

Public: değişkene o classdan ya da programın herhangi bir yerindn erişenbilirsiniz (global değişken)
bu classdan türetilen nesne destroy edildiğinde dolayısı ile buna üye olan değişkenler de destroy edilmiş olur.
Class tanımı dışıında (altında ya da üstünde) olan değişkenler eğer nesne değiller ise destroy edilemez.
Ancak varsayılan değerlerine getirebilirsiniz. ( Hoş, integer için ne verirseniz verin bellekte kapladığı yer gene aynıdır (packed denilmemiş ise) )
String='', Integer=0 veya -1 gibi.
ama gene de class dışında tanımlı global değişkenlerden hem programın selahiyeti açısından hem de bellek açısından kaçınmakta fayda var.