mdiform içinde child form çağırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
hakan
Üye
Mesajlar: 11
Kayıt: 02 Tem 2003 01:10
Konum: Ankara

mdiform içinde child form çağırma

Mesaj gönderen hakan »

iyi çalışmalar
bana mdiform içinde childformu çağırma hakkında bilgi veya fikirlerinizi iletirseniz çok sevinirim.uğraştım ama bir türlü mdiform içinde childformu çağıramadım.Yardım ve fikirleriniz için şimdiden teşekkürler.
İyi çalışmalar Arkadaşlar:=)
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

MDI formdaki bir menuden su kod ile child formu cagiriyorum.... Tabi formu autocreate listesinden cikartiyorum. Yani form sadece cagirildigi zaman create ediliyor....

Kod: Tümünü seç

  if (FRM_KATEGORIK_MUSTERI=NIL) then
    FRM_KATEGORIK_MUSTERI:=TFRM_KATEGORIK_MUSTERI.Create(self);
  FRM_KATEGORIK_MUSTERI.WindowState:=wsNormal;
  FRM_KATEGORIK_MUSTERI.Show;
Child form olan FRM_KATEGORIK_MUSTERI un onclose'unda da

Kod: Tümünü seç

FRM_KATEGORIK_MUSTERI=nil;
yazarak ayni formun birden fazla cagirilmasini engelemis oluyorum.
hakan
Üye
Mesajlar: 11
Kayıt: 02 Tem 2003 01:10
Konum: Ankara

Allah gönlünüze göre versin:=)

Mesaj gönderen hakan »

çok teşekkürler abi Ramazanınızda bu arada mübarek olsun
SELAM SAYGI DUA İLE
Hizmetlerinizden dolayı ALLAH razı olsun:=)
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba

Fahrettin Hocam kusura bakmayın kafama takıldığı için soruyorum Formu yokederken FRM_KATEGORIK_MUSTERI=nil; Child forma Nil atamışsınız niye sadece Free ile hafızadan çıkartmadınız arasında fark varmıdır varsa nedir. Bu konuda bizi bilgilendirirseniz sevinirim.


İyi Akşamlar.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Estağfurullah.....
Bunu sormaniz iyi oldu zira aslinda nil atamadan önce de

Kod: Tümünü seç

Self.Free;
şeklinde bir kodu yazmak gerektiğini unutmuştum. Fakat bu kodun çalışması ile form hafizadan gitse bile FRM_KATEGORIK_MUSTERI isimli değişken tekrar form olarak create edilmeden önceki hali olan nil durumuna dönmemekte. Ancak nil atamasi ile bu saglanabiliyor. Bundaki amaç da dediğim gibi formun birden fazla create edilmesini önlemek kodda görüldüğü üzere eğer nil ise create ediliyor. Form bir defa açılıp kapandığında eğer on close'da nil atanması yapılmaz ise de değişkenin değeri nil olmadığı için create edilme koduna girmiyor.

Tabi bu yöntem yoğurdu benim yeme tarzım. Yani başka alternatifler de olabilir. Uzun zamandır bu kodu kullanmaktayım.

Kolay gelsin....

Kolay gelsin....
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Hocam bu konuda bilgilendirdiğiniz için teşekkür ederim.

İyi Geceler ve İyi Ramazanlar.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Rica ederim...
Size de.....
hakan
Üye
Mesajlar: 11
Kayıt: 02 Tem 2003 01:10
Konum: Ankara

Mesaj gönderen hakan »

s.a
fahrettin abi kusura bakma rahatsız edecem ama kodu ve dediklerini aynen yaptım project çalışıyor ama child olan form ekrana gelmiyor
hatta
begin
var
form2:tform2;
(senin kod)
yazdım ama form2 ekrana gelmedi abi bana yardm et nolursun
görüşmek dileğiyle:=)
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

arkadaşım baştan adım kullandığım yöntemi anlatıyim :

1. Bir form oluştur, mesela form2 olsun.
2. mdichild yap
3. Project-> options kısmından avaible forms kısmına al

formu göstermek için :

if Assigned(Form2) then //++
Form2.BringToFront //++
else //++
Form2 := TForm2.Create(Self);

yaz. Form2'nin OnClose olayına da :

Action := caFree;
Form2 := nil; //++

yaz. Hepsi bu kadar.

NOT : burada nil atamasını form eğer oluşturulmuş ise bir daha oluşturmak yerine öne getrimek için kullandım. Yani ben bu formun 2. sefer oluşturulmasını istemiyorum. Değilse sonunda //++ olan satırları sil.

Kolay gelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Sağolsun Admin olayi izah etmiş...
umarim sorun hallolmuştur...
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

Admin'nin mesajını kendi projemde kullandım.Ama bu sefer formum hiç açılmadı.Projede kullandığım kodları aşağıda gönderiyorum bir terslik varsa düzeltmenizi dileyerek
Saygılarımı sunuyorum

procedure TservisForm.ToolButton2Click(Sender: TObject);
var arzKytForm : TarzKytForm;
begin
if Assigned(arzKytForm) then
arzKytForm.BringToFront
else
arzKytForm := TarzKytForm.Create(Self);
end;

=====================================

procedure TarzKytForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DATAForm.arizaKayitADOQuery1.Cancel;
Action := caFree;
arzKytForm := nil;
end;
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

hocam bir noktayı atlıyorsun demek ki. Sıfır bir proje oluşturup yazdıklarımı adım adım bir dene, olduğunu göreceksin.

Aklıma gelebilecek birkaç husus :

1. mdichild mı bir kontrol et.

2. var arzKytForm : TarzKytForm; satırına gerek yok. Formun unitini uses kısmına eklemen yeterli.

Kolay gelsin.
Kullanıcı avatarı
ademiz
Üye
Mesajlar: 151
Kayıt: 30 Tem 2003 02:41
Konum: İstanbul
İletişim:

Mesaj gönderen ademiz »

Mustafa bey teşekkür ederim;

var arzKytForm : TarzKytForm;

değişken satırını silince program düzeldi

Saygılar :)
hakan
Üye
Mesajlar: 11
Kayıt: 02 Tem 2003 01:10
Konum: Ankara

Mesaj gönderen hakan »

s.a
hocam child form ekrana geliyor mesele yok
ama mdi olan formdaki bileşenler (örneğin button) child form çağrıldığında
da halen daha ekranda gözüküyor Ayrıca child form birkez çalıştırıldıktan sonra bi daha çalışmıyor.
ben mdi formdan child formu istediğimde(birden fazla) nasıl çağıracam
vede mdi form bileşenlerinin neden gözüktüğünü(childform üstünde gözüküyor) de anlamış deyilim.
iyi çalışmalar.
alttaki olayı aynen yaptım(sorunlu)
**********
1. Bir form oluştur, mesela form2 olsun.
2. mdichild yap
3. Project-> options kısmından avaible forms kısmına al

formu göstermek için :

if Assigned(Form2) then //++
Form2.BringToFront //++
else //++
Form2 := TForm2.Create(Self);

yaz. Form2'nin OnClose olayına da :

Action := caFree;
Form2 := nil; //++
***********
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

A.S.

adım adım dene çalışacaktır hocam :wink: Ben epey bir süredir doğruluğunu test ederek kullanıyorum bu yöntemi.
ben mdi formdan child formu istediğimde(birden fazla) nasıl çağıracam
bunuda not kısmında belirtmiştim. Sonunda //++ olan satırları silerseniz, bir childformda istediğiniz kadar oluşturabilirsiniz. Ancak bu sadece döküman tarzı işlemler yaparsanız faydalı. Ben pek tercih etmiyorum genelde.

Kolay gelsin.
Cevapla