En basitinden aklıma ilk gelen, yeni bir tane daha form açarsınız, oraya "Lütfen bekleyin kayıt yapılıyor" türünden mesajınızı yazarsınız. Daha sonra birkaç saniye beklettikten sonra formu kapattırırsınız. Bu yeni forma, progressbar gibi birşey de koyarak görsellik kazandırabilirsiniz.
tablonun beforepost eventına mesaj penceresini gösterecek kodu yazın yani form2.showmodal gibi form2 yide istediğiniz mesajı yazıp büyüklüğünü ayarlayın v.s. sonra afterpost eventinde form2 yi close yapın ancak bu kayıt işi çok kısa sürdüğünden mesajın pek bir anlamı kalmıyor.Bende öyle bir problemi timer ile ayarlamıştım kayıt süresinin en fazla 3 sn.olacağını düşünüp 5 sn.lik bir timer ile mesaj formunu show ve close yapmıştım.2 sn.kandırmaca yani.
serkan yazdı:Bende öyle bir problemi timer ile ayarlamıştım kayıt süresinin en fazla 3 sn.olacağını düşünüp 5 sn.lik bir timer ile mesaj formunu show ve close yapmıştım.2 sn.kandırmaca yani.
Hocam boş yere niye kullanıcıyı oyalıyorsunuz ki. bir status bar koyup onda kayıttan sonra kaydedildi şeklinde bir mesaj vermek en doğrusu.
procedure TForm34.Button20Click(Sender: TObject);
begin
label1.caption:='Kayıt işlemi Başladı..';
//istenilen işlem başlangıcı
Table1.Post;
label1.caption:='Kayıt işlemi Başarıyla Yapıldı.';
//istenilen işlem bitişi
end;
Şeklinde bişey en mantıklı olanı galiba.
Saygılarımla
Kolay gelsin
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
bu tür çalışmalara ben de girdim. mesela büyük bir veri aktarımı sırasında bi progressbar koyayım dedim. (excel tablosundan database e aktarım yaparken). ama olmadı. o tabloya yogun veri girişi sırasında makine kitleniyor gibi oluyordu. ne progressbar gözüküyodu ne de bişey.
sonradan başka bir program yazdım. ufak bi program. o program sadece excel tablosunun kayıt sayısına göre progressbarı ilerletiyordu. farklı bi exe olduğu için progressbar gayet güzel gözüküyodu.
bu olayı düzenli yapabilen varsa bizimle de paylaşırsa sevinirim.
saygılarımla
hocam döndülerle veri kaydı yaparken formda yenileme işlemi olmuyor döngü sırasında tableX.next den sonra
Application.ProcessMessages ;
koyarsan bu sorun düzeliyor ama bu pek tavsiye edilen bir yöntem değilmiş biyerde okumuştum.Kolay gelsin
belirli bir süre gürünüp sonra kaybolmasını istiyorsan, timer kullanabilirsin
label in sadece kayıt işlemini bildirecekse visible:=false/true yordamı ile görünüp kaybolmasını sağlayabilirsin
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.
Table1.BeforePost'ta mesaj formunu create edip gösteririrz.
Table1.AfterPost'ta ise bu formu free ederiz.
Ama BeforePost'a bi REfresh yapmak ve hatta Application.Progressmessage yapmak iyidir.
Bu arada arakaşımızınbiri Progressmessages, neden iyi bir yöntem değil demiş diye sormuş Haklı olarak. Aslında çokta iyi bir yöntemdir.
Şöyle düşünün 1.000 tane ve her birinde 10-15 field olan bir kayılar zincirini Tabloya kaydediyorsunuz. Bu işlem sırasında form kilitlenmiş gibi görünür. Hatta, kayıt işlemi yaparken, kalan kayıt miktarını yada progressbar gibi bişi koyduğunuzu düşünelim. Bunların hiç biri hareket etmeden öylece durur. Arada bir kafasına göre hareket ediyormuş gibi. olur.
Ama her kayıt işleminden sonra yada önce Application.ProgressMessages ya da Applicaiton.HandleProgress gibi bi komut sizi kurtarır.
Fakar şunuda kullanmak iyi olaiblir. ProgressBar için mesela, her kayıttan sonra PB.Position := PB.Position + 1 yapıyoruz ve ardından PB.Refresh; deriz. Buda iyidir.
Ama ilem esnasında kullanıcı programda başka şeylerde yapmak isterse, o zaman ProgressMessages en iyisidir.
SendMessage ile PostMessage arasındaki farkı bilmeden Windows Mesajlaşması yapan kişiler, şunu anlamışlardır ki, Application.ProgressMessages hiç iyi bişi değildir derler.
Son olarak,
Application.ProgressMesage, windows mesaj havuzudaki tüm mesajları işletmesini ister.
Application.HandleMessage ise, eldeki (sırdaki) mesajı işletir.