Selam Arkadaşlar;
Bir proje yaparken yeni birşey öğrendim;
çalışma sırasında yeni fsMDIChild formlar oluşturuyorum ve bu formların onCreat 'inde Toollbar da yeni butonlar formu kapattığımda ilgili butonunda Free edildiğini gördüm bunu açıklayabilirseniz sevinirim..
Saygılarımla;
Form Creat içinde button oluşturma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Form Creat içinde button oluşturma
Başkasına Olan Saygımız.. Kendimize Olan saygıdır..
Merhaba,
Eğer doğru anladıysam; bir MDIChild form oluşturuyorsunuz ve OnCreate olayında ana formun toolbar'ına yeni nesneler ekliyorsunuz. Ancak child formu kapatınca düğmeler kayboluyor. Bunun nedenini öğrenmek istiyorsunuz...
Kısa cevap:
Sebebi "Owner" denilen, yani nesnenin sahibi olan bir başka nesnenin yok edilmesidir.
Uzun cevap:
Bir wincontrol nesnesi yarattığınızda, o nesneye bir "owner" (sahip) atarsınız.
Button1 := TButton.Create(Form1);
Örneğinde (Button1)in sahibi (Form1)dir ve onun yok edilmesinden ve hafızadan temizlenmesinden (Form1) sorumludur. Eğer
Form1.Free;
komutunu çalıştırırsanız, formla birlikte düğme de yok edilecektir. "Owner" kavramının dışında "Parent" (üzgünüm Türkçe'sini bilemiyorum) kavramı da vardır. "Parent" oluşturulan nesnenin nerede bulunacağını belirler. Nesnenin "Owner"ı ve "Parent"ı farklı nesneler olabilir.
Muhtemelen siz MDIChild formu kapattığınızda Delphi formu yokediyor ve bu da formun sahip olduğu tüm nesnelerin - "Parent"ı ana form olan araç çubuğu düğmeleri de dahil - yok olmasıyla sonuçlanıyor.
Umarım yeterince açık anlatabilmişimdir.
Ertuğ Kaya
Eğer doğru anladıysam; bir MDIChild form oluşturuyorsunuz ve OnCreate olayında ana formun toolbar'ına yeni nesneler ekliyorsunuz. Ancak child formu kapatınca düğmeler kayboluyor. Bunun nedenini öğrenmek istiyorsunuz...
Kısa cevap:
Sebebi "Owner" denilen, yani nesnenin sahibi olan bir başka nesnenin yok edilmesidir.
Uzun cevap:
Bir wincontrol nesnesi yarattığınızda, o nesneye bir "owner" (sahip) atarsınız.
Button1 := TButton.Create(Form1);
Örneğinde (Button1)in sahibi (Form1)dir ve onun yok edilmesinden ve hafızadan temizlenmesinden (Form1) sorumludur. Eğer
Form1.Free;
komutunu çalıştırırsanız, formla birlikte düğme de yok edilecektir. "Owner" kavramının dışında "Parent" (üzgünüm Türkçe'sini bilemiyorum) kavramı da vardır. "Parent" oluşturulan nesnenin nerede bulunacağını belirler. Nesnenin "Owner"ı ve "Parent"ı farklı nesneler olabilir.
Muhtemelen siz MDIChild formu kapattığınızda Delphi formu yokediyor ve bu da formun sahip olduğu tüm nesnelerin - "Parent"ı ana form olan araç çubuğu düğmeleri de dahil - yok olmasıyla sonuçlanıyor.
Umarım yeterince açık anlatabilmişimdir.
Ertuğ Kaya
Form'un OnCreate'de :
Button:= TButton.Create(nil) yapsaydın Form'un OnDestroy'da kendin Button.Free demek zorunda kalacaktın.
Button:= TButton.Create(Form1) yaparak Button'un sahibini Form1 yapmış oldun.
Şimdi Form'u Form1.Free yaparken birsürü şey olur. Ancak en önemlisi Form sahiplik yaptığı component listesini bir döngü içinde tek tek Free eder ve daha sonra kendini Free eder.
Free proc. Form'un Destroy destructor'unu çağırır.
Destructor şöyle birşey:
Misal:
destructor TForm.Destroy;
begin
..........
........
for I:= 0 to Components.Count - 1 // buraları sallıyorum
Components.Free;
// Üstteki yordama benzer bir yolla sahip olduğu bütün componentleri Free eder.
end;
Button:= TButton.Create(nil) yapsaydın Form'un OnDestroy'da kendin Button.Free demek zorunda kalacaktın.
Button:= TButton.Create(Form1) yaparak Button'un sahibini Form1 yapmış oldun.
Şimdi Form'u Form1.Free yaparken birsürü şey olur. Ancak en önemlisi Form sahiplik yaptığı component listesini bir döngü içinde tek tek Free eder ve daha sonra kendini Free eder.
Free proc. Form'un Destroy destructor'unu çağırır.
Destructor şöyle birşey:
Misal:
destructor TForm.Destroy;
begin
..........
........
for I:= 0 to Components.Count - 1 // buraları sallıyorum
Components.Free;
// Üstteki yordama benzer bir yolla sahip olduğu bütün componentleri Free eder.
end;