MDI form yaratmada sorun.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
gulcin
Üye
Mesajlar: 6
Kayıt: 12 Nis 2005 09:32
Konum: Eskişehir

MDI form yaratmada sorun.

Mesaj gönderen gulcin »

Kod: Tümünü seç

procedure tform1.mdiformac(gelenform:Tform; gelenformsinif:Tformclass);
begin
  if gelenform = nil then
  begin
    gelenform := gelenformsinif.Create(nil);
  end
  else
    begin
     gelenform.show;
    end; 
end;
Yukarıdaki kodları butonun Click olayına yazarsam doğru sonucu elde ediyorum:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if form2 = nil then
  begin
    form2 := Tform2.Create(nil);
  end
  else
    begin
     form2.show;
    end;
end;
Fakat procedure olarak kullandığımda

Kod: Tümünü seç

mdiformac(Form2,Tform2);
sürekli nil değerini döndürüyor ve formu sürekli açıyor.

Yapmak istediğim , butonun click olayındaki gibi çalışan bir procedure yazmak. Bunun için procedure de ne gibi değişiklikler yapmalıyım. :shock:
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Nil atamaların doğrumu peki :?: Formları kapattığın zaman Nil ataması yaıyormusun :?:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
sychorax
Üye
Mesajlar: 206
Kayıt: 20 May 2004 04:29

Mesaj gönderen sychorax »

MDI formlar için ayrı sınıf oluşturduğunda inherit ettiğin her forma ayrı ayrı nil ataması yapman gerekiyor.

Kolay gelsin
Kullanıcı avatarı
gulcin
Üye
Mesajlar: 6
Kayıt: 12 Nis 2005 09:32
Konum: Eskişehir

Mesaj gönderen gulcin »

MFIChild olan formun onclose olayına aşağıdaki kodu yazdım.

Kod: Tümünü seç

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  form2 := Nil;
  action := CaFree;
end
Fakat form kapatılmadan tekrar procedure u çağıran butonu tıkladığımda form2 den tekrar açıyor.
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Formunu oluştururken

Kod: Tümünü seç

if not assigned(Formadı) then
          begin
          form:=Tform.create(self);
          form.show;
         end
         else
         form.show;
         end;
assigened le kontrol ettikten sonra formun olup olmadığına göre kontrol ettir ona gör işlem yaptır..

kapatırken ise

Kod: Tümünü seç

action:=cafree;
          form:=nil;  /// nil ataki assigned yöntemi işe yarasın assigned forma nil atanıp atanmadığını kontrol eder ve kod işe yarar.

kolay gelsin
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Kullanıcı avatarı
gulcin
Üye
Mesajlar: 6
Kayıt: 12 Nis 2005 09:32
Konum: Eskişehir

Mesaj gönderen gulcin »

Daha önce yazdığım ve sizden gelen kodlar butonun click olayında gayet düzgün çalışlıyor. Ama ben bu kodlarla procedure oluşturduğumda aynı sonucu elde edemiyorum.

Kod: Tümünü seç

procedure tform1.mdiformac(gelenform:Tform; gelenformsinif:Tformclass); 
Procedure ü tanımalrken yanlış bir değer tanımlamasımı yapmaktayım? Yada doğru tanımlama nedir?
Click olayında çalılan bir komut, Procedure olarak çağrıldığında neden çalışmaz?
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

oluşan hatayı yazarsanız daha çok yardımcı oluruz .
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

vedatkaba yazdı:Formunu oluştururken

Kod: Tümünü seç

if not assigned(Formadı) then
          begin
          form:=Tform.create(self);
          form.show;
         end
         else
         form.show;
         end;
Şöyle olsa daha mantıklı...

Kod: Tümünü seç

if not assigned(Formadı) then
  form:=Tform.create(self);
form.show;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Bir de şu şekilde dener misin... Yalnız GelenForm'a Ana Formunun Name'ini gönder...

- Çünkü oluşacak MDIChild'ler hep Ana Formun MDIChild listesine eklenirler... Gerekli açıklamaları procedure içinde yaptım...

- Yani şu şekilde kullan...

Kod: Tümünü seç

   MDIFormAc(Form1, TForm2);

Kod: Tümünü seç

Procedure MDIFormAc(GelenForm: TForm; GelenFormSinif: TFormClass);
var
  i: Integer;
begin
  // MDI Form olan Ana formumuz GelenForm'a bağlı tüm MDIChild'leri kontrol ediyoruz.
  // Bakıyoruz ki belirlediğimiz TypeClass'da ChildForm var mı ?
  for i := 0 to GelenForm.MDIChildCount - 1 do
  begin
    if GelenForm.MDIChildren[i] is GelenFormSinif then
    begin
      // Mevcut ama minimize ve/veya arkada olanı
      // Activate etme işlemleri vesaire...
      Exit;
    end;
  end;
  // Mevcut değilse Create et...
  GelenFormSinif.Create(GelenForm);
end;
En son mrmarman tarafından 22 Nis 2005 12:07 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

if gelenform = nil then 
yerine

Kod: Tümünü seç

if gelenform<>nil then 


kullanıpta denesen
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
Cevapla