Ana Form da Child Formların Açılıp kapanışını Yakalamak

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen IZLEN »

Slm Arkadaşlar
Ana Form um var Bu formda child formlar açıyorum lazım oldıkça birden fazla
ben her child form yada normal formun açıldığında ve kapandığında bişiler yapmak istiyorum mesela açılan formun caption unu alıp bir listeye koyacağım bu liste anaformda sonra kapanında listeden çıkaracağım
Bunu nasıl yapabilirim valla mesajlara baktım bulamadım
ama bunu sadece ana formun içerisine ekleyeceğim bir mesaj yakalama procedure ile yapmam lazım
yardımcı olursanız evinirim Teşekkürler
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen sabanakman »

Child formlarını açarken ve kapatırken ayrıca yazdığın bir fonksiyon içinden çalıştır ve gerekli kodu buraya yaz. Mesela..:

Kod: Tümünü seç

function FormAc(const FormSinifi:TComponentClass;var Form):Boolean;
var Bilesen: TComponent;
begin
  Result:=True;
  try
    if not Assigned(TComponent(Form)) then begin
      Bilesen := TComponent(FormSinifi.NewInstance);
      TComponent(Form) := Bilesen;
      Bilesen.Create(Application);
    end;
    with TForm(Form) do begin
      Show;
    end;
    //.......form açılırken yapılacak işler burada yapılabilir
  except
    on E:Exception do begin
      TComponent(Form) := nil;
      Result:=False;
      ShowMessage('Bir hata oluştu ->'+E.Message);
    end;
  end;
end;
//--------------------------------------------
function FormKapat(var Form):Boolean;
begin
  try
    FreeAndNil(TComponent(Form));
    //......form kapatılırken yapılacak işler de bu prosedürde
  except
    on E:Exception do begin
      Result:=False;
      ShowMessage('Bir hata oluştu ->'+E.Message);
    end;
  end;
end;
fonksiyonları ile formlarını açar ve kapatırsan açılış ve kapanışları yakalamış olursun. Ayrıca formlarının yok edilirken (onDestroy veya onClose olaylarından uygun olanında) çalıştıracağın bir prosedürle de formlarının kapanışlarını yakalayabilirsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen IZLEN »

Bu dediğiniz yöntem ile yapmak biraz zor benim için çünki formların yok edilmesi kendi içinde oluyor
ve oluşturulmasıda ayrı ayrı yerlerde
bu nedenler ana form üzerinden bir mesaj ile child oluştu ve chılk kapandı gibi bir mesaj alarak yapmam lazım
başka türlü işime yaramaz şu anda yapıyı değiştirmem lazım Teşekkür ederim ilginiz için

Nasıl olabilir acaba 1 haftadır bakmadığım yer kalamadı arkadaşlar
İzlen
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen sabanakman »

IZLEN yazdı:...formların yok edilmesi kendi içinde oluyor
ve oluşturulmasıda ayrı ayrı yerlerde..
Ayrı yerde oluşan form nasıl oluşuyor, gökten zembille inmiyordur sanırım :) . Mesela Form2 formunu, ya

Kod: Tümünü seç

Form2:=TForm2.Create(Application);
kodu ile ya da

Kod: Tümünü seç

Application.CreateForm(TForm2,Form2);
kodu ile oluşturman gerekiyor. İşte bu oluşturma ve açma işini

Kod: Tümünü seç

FormAc(TForm2,Form2);
kodu ile yapacaksın o kadar.

Bir de formunun kapanış olayı için

Kod: Tümünü seç

procedure Kapaniyor(Form:TForm);
begin
//....
end;
şeklinde hazırladığın bir prosedürü tüm formların onClose olayına yazacağın

Kod: Tümünü seç

Kapaniyor(Self);
kodu ile kapanan formlarla ilgili işlemi uygulayabilirsin. Sistem aslında çok kolay, formlar oluşturulup açılırken sadece FormAc kullanmak ve her formun onClose olayına da Kapaniyor(Self); yazmak gerek o kadar. Bu iş o kadar sıkıntı veren bir işlem olmasa gerek.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen IZLEN »

Slm Arkadaşım eğer program yapısınını sizn dediğiniz gibi tasarlamş olsaydım söylediğiniz gibi yapabilirdim
ama her child formu başka bir procedure da açıyorum ve panışını kendi içinde yapıyorum dolayısı ile bi sürü kod yazmam lazım
bunun yerine bir mesaj procedure ile ana formda bu mesaşları yakalayıp halletmek istiyorum yani
bu yönde destek olursanız sevinirim çünki program hali hazırda kullanılıyor :)
Teşekkürler
İzlen
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen Battosai »

sabanakman olayı güzel anlatmış.Meseleyi ya sen anlamıyon yada anlatamıyorsun mesela;
her child formu başka bir procedure da açıyorum ve panışını kendi içinde yapıyorum
burda ne demek istiyorsun pek anlaşılmıyor kapanışı kendi içinde yapmakla neyi kastediyorsun verilen kodlar ile kapatılmıyor mu yani...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen sabanakman »

Aslında arkadaş suya sabuna dokunmak istemeden işi bitirmek istemiş. Olsun!. Onun da yolu var. Kendimiz bir TForm sınıfı yazarız ve bu sınıfın bulunduğu uniti diğer formlarda en sonda tanımlarız. Mesela

Kod: Tümünü seç

unit KendiFormum;

interface

uses Dialogs, Forms;

type

  TForm = class(Forms.TForm)
  protected
    procedure DoHide; override;
    procedure DoShow; override;
    procedure DoClose(var Action: TCloseAction); override;
  end;

implementation

{ TForm }

procedure TForm.DoHide;
begin
  inherited DoHide;
  ShowMessage('Gizleniyor');
end;

procedure TForm.DoShow;
begin
  inherited DoShow;
  ShowMessage('Açılıyor');
end;

procedure TForm.DoClose(var Action: TCloseAction);
begin
  inherited DoClose(Action);
  ShowMessage('Kapanıyor');
end;

end.
kodlarını KendiFormum.pas ismi ile kayıt edip, projemize ekleyelim ve tüm formlarda bulunan üstteki uses satırında en sona KendiFormum unit'ini ekleyelim. Özellikle Forms'dan sonra yazılmasına dikkat edilmeli. Bu şekilde KendiFormum unitinin tanımladığı tüm formların açılış ve kapanış anları yukarıdaki kodlar sayesinde yakalanacaktır.

Kod: Tümünü seç

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Spin, ExtCtrls, Buttons, Gauges, Eklentiler,
  AppEvnts, DB, ADODB, {---->} KendiFormum{<----};
Gibi. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
IZLEN
Üye
Mesajlar: 58
Kayıt: 07 Mar 2008 02:40
İletişim:

Re: Ana Form da Child Formların Açılıp kapanışını Yakalamak

Mesaj gönderen IZLEN »

Evet Arkadaşım sonunda oldu işte istediğimi bu yolla halledebilirim
hay Allah ben nasıl düşünemedim yaaa :)
Arkadaşım Çok Teşekkür Ederim Süper Olacak şimdi istediğim yani
İzlen
Cevapla