modal bir formu pasif formdan kontrol etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
csyasar
Üye
Mesajlar: 646
Kayıt: 25 Şub 2004 10:14
Konum: Tokat

modal bir formu pasif formdan kontrol etmek

Mesaj gönderen csyasar »

arkadaşlar;

elimde mdi-child formlardan oluşmuş bir proje var.

bizim için önemli olan 3 form. bunlar:

formcari_liste, formcari_kart, formonay

formcari_liste: cari listelerin tutulduğu form. burada bir dbgrid var. ve müşterileri orada listeliyorum.

formcari_kart: cari kayıtların düzenlendiği form

formonay: kayıt esnasında ortaya çıkıp kullanıcıya işlemin devam ettiğini bildiren form. amacı:mesela ağ ortamında client bilgisayar kayıt yaparken programın kaydet komutunu verince 3-5 saniye öylece kalmamasını sağlıyor.


sonra visible:=false olan fsNormal formcari_kartı showmodal yapıyorum.

sonra kaydet butonuna basıldığında;

Kod: Tümünü seç

Application.CreateForm(Tformonay,formonay);
formonay.showmodal;
formcari_liste.q_cari.Post;
formcari_liste.tr.CommitRetaining;
change:=0;
formonay.close;
Close;
diyorum ama formonay modal olduğu için kapanmıyor. daha doğrusu modal olan formcari_kart formundan kapanırken formonay.showmodal deyince modal icra ediliyor ama diğer işlemler ve onay formunun kapanması sağlanmıyor. bu onay formu bütün formlarda kullanılıyor.


bunu nasıl halledebiliriz?
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

showmodal komutundan önce

Application.ProcessMessages;

Komutunu kullanmayı denedin mi?

Bu ara debug etmeyi dene bu satırlar showmodal komutundan sonra çalışıyormu buna bak bi...
Oldeye Software
http://www.oldeye.com
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Close yerine ModalResult := mrOK; veya ModalResult := mrCancel; diye modal formları kapatabilirsin.

Benim genel çalışma prensibim şu. Modal formlarda 2 buton olur, birinden mrOK, birinden mrCancel ile formu kapatırım. Buna göre işlemleri modal formda değil, diğer formda yaparım. Yani şuna benzer bir yapı :

Kod: Tümünü seç

....
//modal formu create et
if ModalForm.ShowModal = mrOK then // kullanıcı tamam'a basmışsa
begin
 ..... // işlemleri yap
end;
...
Kolay gelsin.
csyasar
Üye
Mesajlar: 646
Kayıt: 25 Şub 2004 10:14
Konum: Tokat

Mesaj gönderen csyasar »

anlatamadım sanırım. durun resimle destekleyerek anlatmaya çalışayım...

Resim

şimdi yukardaki formlarda gözüken cari karttaki kaydet butonuna basılınca:

Kod: Tümünü seç

Application.CreateForm(Tformonay,formonay);
formonay.ShowModal;
formcari_liste.q_cari.Post;
formcari_liste.tr.CommitRetaining;
formonay.Close;
change:=0;
Close;
kodunu icra edecek ve gördüğünüz gibi kayıt yapılınca onay formunu kapatacak. fakat onay formunu modal olduğu için müdahale edemiyor. ve doğal olarak da kapatamıyor. ancak show olarak gösterirken kapatıyor. onu da ben istemiyorum...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

viewtopic.php?t=5411&highlight=modal

hocam kaç dakka sürüyor ki işlem splash çıkarıyorsun :D
csyasar
Üye
Mesajlar: 646
Kayıt: 25 Şub 2004 10:14
Konum: Tokat

Mesaj gönderen csyasar »

mussimsek yazdı:hocam kaç dakka sürüyor ki işlem splash çıkarıyorsun :D
mustafa abi üst tarafta sanırım yazmıştım. bu özellik local makinede kullanılamaz. because hızlıca açılıp kapanır. ama network ortamında client makine için çok süper olur. neden derseniz:

kullanıcı kaydet dediği zaman servera kaydettiği için bir süre bekletir. o zamanda işi bilmeyen kullanıcı "anaaaa programa noldu? kitlendiya laaaaaan o adamın programı! neyse resetleyelim" filan der yoluna devam eder. bu sebepten dolayıda bir miktar veri kaybeder. sonrada der ki: "ben veri kaybettim ve bu programı istemiyorum!"

ben bu durumun sıkıntısını çok yaşadım ve böyle bir şeyin çok kullanışlı olacağı yönünde karara vardım. böyle olursa en azından kullanıcı kaydet dediği zaman bir miktar bekler ve ekrandaki "Kaydediliyor..." yazısını gördüğü için reset tuşuna elleşmez...
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

modal olarak çağırmanıza gerek olmayabilir.
ben genelde şu tarz kullanıyorum.

Kod: Tümünü seç

frmSplash :=TfrmSplash.Create(nil);
frmSplash.Show;
TablolariKaydet;
TablolariGuncelle;
Falan;
Filan;
Fismekan;
frmSplash.Hide;
modal olmadığı için kullanıcı arkadaki forma ulaşmasın gibi birşeyler isterseniz arkadaki formun enabled özelliğini değiştirebilirsiniz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla