Sayfa kapandığında değişkenlerin içi silnmiyor.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen tuna »

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.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen conari »

Aynı değişken başka formda olabilir.
o formuda sen bu forma tanıtmışsındır.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen ikra »

action := caFree;
Form1 := nil;

silinmesi lazim
kıdemsiz üye
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen tuna »

conari yazdı:Aynı değişken başka formda olabilir.
o formuda sen bu forma tanıtmışsındır.
Bende öyle düşünmüştüm ama aynı değişkenden başka hiçbir formda yok.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen emin_as »

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.

Kod: Tümünü seç

unit 
 interfacee 
type
  TForm1 = class(TForm)
        ......
   public
      strform1 : string;
   end;

var
  strunit1 : string;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen aslangeri »

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. :wink:
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
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen tuna »

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.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Sayfa kapandığında değişkenlerin içi silnmiyor.

Mesaj gönderen Lost Soul »

Protected:Değ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:Değş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.
Cevapla