Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MDIChild formların OnCreate ve OnClose olaylarının yakalanması
#1
Selam.
Projemde MDI formlar kullanıyorum, her Child form Close olayında Formun boyutlarını ini dosyasına kaydedip, her Create olayında da ini dosyasından okuduğum değerlere göre ekrana basıyorum. Bunu yaparken her formun OnClose ve OnCreate olayına tek tek kodu yazıyorum. Acaba bunu tek kodla yapabilirmiyim? Şu nesnelerdeki kalıtım override olayı ile ilgili biraz uğraştım ama sonuca ulaşamadım. Tek bi fonksiyon yazayım, oluşan-kapanan her child formun boyutlarını ini dosyasına yazıp okuyabileyim, tek tek uğraşmıyayım istiyorum.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#2
(08-11-2016, Saat: 12:06)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelam.
Projemde MDI formlar kullanıyorum, her Child form Close olayında Formun boyutlarını ini dosyasına kaydedip, her Create olayında da ini dosyasından okuduğum değerlere göre ekrana basıyorum. Bunu yaparken her formun OnClose ve OnCreate olayına tek tek kodu yazıyorum. Acaba bunu tek kodla yapabilirmiyim? Şu nesnelerdeki kalıtım override olayı ile ilgili biraz uğraştım ama sonuca ulaşamadım. Tek bi fonksiyon yazayım, oluşan-kapanan her child formun boyutlarını ini dosyasına yazıp okuyabileyim, tek tek uğraşmıyayım istiyorum.

Bu hususu daha evvel izah etmiştim ama yeniden kısa bir bilgi paylaşayım. TXForm = class(TForm) tanımında boş bir formunuz olsun. Diğer formlarınızı da bundan türetin. Ardından boş olan formunuza istediğiniz kodları yazın. TXForm'dan türeyen tüm formlarınızda yazdığınız kodların çalışacağını gözlemleyeceksiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Bana skypeta bahsettiğin konu değil mi abi?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#4
(08-11-2016, Saat: 12:31)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-11-2016, Saat: 12:06)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelam.
Projemde MDI formlar kullanıyorum, her Child form Close olayında Formun boyutlarını ini dosyasına kaydedip, her Create olayında da ini dosyasından okuduğum değerlere göre ekrana basıyorum. Bunu yaparken her formun OnClose ve OnCreate olayına tek tek kodu yazıyorum. Acaba bunu tek kodla yapabilirmiyim? Şu nesnelerdeki kalıtım override olayı ile ilgili biraz uğraştım ama sonuca ulaşamadım. Tek bi fonksiyon yazayım, oluşan-kapanan her child formun boyutlarını ini dosyasına yazıp okuyabileyim, tek tek uğraşmıyayım istiyorum.

Bu hususu daha evvel izah etmiştim ama yeniden kısa bir bilgi paylaşayım. TXForm = class(TForm) tanımında boş bir formunuz olsun. Diğer formlarınızı da bundan türetin. Ardından boş olan formunuza istediğiniz kodları yazın. TXForm'dan türeyen tüm formlarınızda yazdığınız kodların çalışacağını gözlemleyeceksiniz.

Hocam konuyu açtıktan sonra tamda bu bahsettiğiniz olay aklıma gelmişti (evet daha önce söylemiştiniz), onun üzerinde çalışıyodum şimdi Smile
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#5
Tekrar selam,
Olayı hallettik, belki birilerinin ihtiyacı olur diye basit bir örnek vermek gerekirse;
örneğin ben, formun açılışında, eğer ini dosyasında tanımlı width ve height i varsa o değerlerin uygulanmasını, her formun kapanışında da width ve height değerlerinin ini dosyasına kaydedilmesini istiyordum.
önce boş bir form oluşturuyoruz, mesela XFORM adında, FormCreate ve Close olaylarına aşağıdaki kodları yazıyoruz;
procedure TxFORM.FormCreate(Sender: TObject);
begin
Form_Ver(Sender as TForm,500,500);
end;

procedure TxFORM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form_Kaydet(Sender as TForm);
end;

Form create edilirken Form_Ver fonksiyonu aktif formun adına göre gidip ini dosyasını okuyup değer varsa width ve height ini var olan değerlere, yoksa 500,500 değerlerine göre oluşturuyor.
Form kapanırkende Form_Kaydet fonksiyonu aktif formun adını alıp ini dosyasına width ve height ini kaydediyor.
Yeni bir form oluştururkende gidip File->New-Other seçeneğinden kaydetmiş olduğum XFORM dan oluştur diyorum. Oluşturduğum formun OnClose olayına bişi yazacaksamda şu şekilde çıkıyor zaten.

procedure TORNEK_FORM1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 inherited;
ORNEK_FORM:=NIL;
Release;
end;
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#6
(08-11-2016, Saat: 14:57)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTekrar selam,
Olayı hallettik, belki birilerinin ihtiyacı olur diye basit bir örnek vermek gerekirse;
örneğin ben, formun açılışında, eğer ini dosyasında tanımlı width ve height i varsa o değerlerin uygulanmasını, her formun kapanışında da width ve height değerlerinin ini dosyasına kaydedilmesini istiyordum.
önce boş bir form oluşturuyoruz, mesela XFORM adında, FormCreate ve Close olaylarına aşağıdaki kodları yazıyoruz;
procedure TxFORM.FormCreate(Sender: TObject);
begin
Form_Ver(Sender as TForm,500,500);
end;

procedure TxFORM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form_Kaydet(Sender as TForm);
end;

Form create edilirken Form_Ver fonksiyonu aktif formun adına göre gidip ini dosyasını okuyup değer varsa width ve height ini var olan değerlere, yoksa 500,500 değerlerine göre oluşturuyor.
Form kapanırkende Form_Kaydet fonksiyonu aktif formun adını alıp ini dosyasına width ve height ini kaydediyor.
Yeni bir form oluştururkende gidip File->New-Other seçeneğinden kaydetmiş olduğum XFORM dan oluştur diyorum. Oluşturduğum formun OnClose olayına bişi yazacaksamda şu şekilde çıkıyor zaten.

procedure TORNEK_FORM1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 inherited;
ORNEK_FORM:=NIL;
Release;
end;

Form_Ver ve Form_Kaydet metodlarına bir form parametresi geçmenize gerek yok. Self'i kullanabilirsiniz Wink Ayrıca  bu tarz işleri birer metod halinde yapmak ve form'un eventlerinde o metodları çağırmak daha efektif olur. Örneğin;

procedure LoadSettings; virtual;
procedure SaveSettings; virtual;

...
...
procedure TXForm.LoadSettings;
begin
// Ata form'da kayıt yükleme ile ilgili işleriniz var ise
// buraya koyabilirsiniz. Yani tüm genel ifadeler buraya
end;

procedure TXForm.SaveSettings;
begin
// Ata form'da kayıt saklama ile ilgili işleriniz var ise
// buraya koyabilirsiniz. Yani tüm genel ifadeler buraya
end;

procedure TXForm.FormCreate(Sender : TObject);
begin
LoadSettings;
end;

procedure TXForm.FormDestroy(Sender : TObject);
begin
SaveSettings;
end;


...
...

TCariForm = class(TXForm)
public
procedure LoadSettings; override;
procedure SaveSettings; override;
end;

...
...

procedure TCariForm.LoadSettings;
begin
inherited;

// Varsayılan yükleme işi yapıldıktan sonra,
// özel olarak yapmak istediğiniz kodlar buraya
end;

procedure TCariForm.SaveSettings;
begin
inherited;

// Varsayılan kayıt işi yapıldıktan sonra,
// özel olarak yapmak istediğiniz kodlar buraya
end;
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#7
Daha önce bir arkadaşa anlatmak için yapmıştım ekten indirebilirsiniz.


Ek Dosyalar
.zip   delphican.zip (Dosya Boyutu: 5,64 KB / İndirme Sayısı: 21)
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ]-Başka Uygulamadaki MDIChild Form Handle Alma hi_selamlar 9 221 29-06-2018, Saat: 09:52
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi