Application.ProcessMessages
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Application.ProcessMessages
S.A.
Arkadaşlar programlarımıza kontrol amaçlı kullandığımız Application.ProcessMessages komutunu
tam olarak nereye yazacağız, tek satırlık kodlarda nereye, döngülerde nereye yazmamız gerekiyor.
Arkadaşlar programlarımıza kontrol amaçlı kullandığımız Application.ProcessMessages komutunu
tam olarak nereye yazacağız, tek satırlık kodlarda nereye, döngülerde nereye yazmamız gerekiyor.
Re: Application.ProcessMessages
Bahsettiğiniz kodu program kitlenmesine karşı döngü içinde kullanabilirsiniz. Döngü içinde nerede kullandığınızın önemi yok.
Re: Application.ProcessMessages
Program bir döngü yürütüyorken, mouse tıklaması, bir label ın caption özelliğin değişmesi, stop button una tıklanması gibi oluşan mesajları döngü bitene kadar kuyrukta bekletir. Böylece programımız döngü bitene kadar stop button nuna basıldığını anlayamaz. ProcessMessages kuyrukta bekleyen mesajların o anda işletilmesini sağlar. Ben genelde ProcessMessages ı Progressbar.Position := xxx veya LabelIslem.Caption := 'falan filan' gibi bir komut satırının hemen ardına koyarım ki yaptığım değişiklik ekrana yansısın.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Re: Application.ProcessMessages
madem konu açılmış, bende aklıma gelen bir konuyu deneyimi olan arkadaşlara sorayım bu komutu mobil de kullanımda sorun varmı, aynı işlemi orada gerçekleştiriyor mu.
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Application.ProcessMessages
Cevaplar için teşekkür ederim.
Peki diyelim ki internet bağlantısını kontrol edeceğiz.
komutu yazıyoruz. if internetgetconnectedstate(...
internetimiz problemli, program donuyor... ne yapacağız
Application.ProcessMessages burada işe yarar mı ?
Peki diyelim ki internet bağlantısını kontrol edeceğiz.
komutu yazıyoruz. if internetgetconnectedstate(...
internetimiz problemli, program donuyor... ne yapacağız
Application.ProcessMessages burada işe yarar mı ?
Re: Application.ProcessMessages
Donanım kaynaklı beklemeleri düzeltmez
thread içinde kullanmak gerek. seri porttan bilgi beklemek, network bağlantı, bilgi vs gibi ucu donanıma dokunan işler.
Kolay gele

Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Application.ProcessMessages
internet kontrolü ile ilgili (internetgetconnectedstate) basit bir thread kodu yazabilir misinizfreeman35 yazdı:Donanım kaynaklı beklemeleri düzeltmezthread içinde kullanmak gerek. seri porttan bilgi beklemek, network bağlantı, bilgi vs gibi ucu donanıma dokunan işler.
Kolay gele
Re: Application.ProcessMessages
Anladığım kadarıyla bu işlemi şu şekilde kolaylıkla yapabilirsiniz.White Rose yazdı:Cevaplar için teşekkür ederim.
Peki diyelim ki internet bağlantısını kontrol edeceğiz.
komutu yazıyoruz. if internetgetconnectedstate(...
internetimiz problemli, program donuyor... ne yapacağız
Application.ProcessMessages burada işe yarar mı ?
Kod: Tümünü seç
const
ZamanAsimi=60000;
var
baslangic:Cardinal;
begin
IslemiDurdur:=false;
baslangic:=GetTickCount;
while ((not internetgetconnectedstate(x)) and (not IslemiDurdur)) do
begin
Application.ProcessMessages;
if (baslangic<GetTickCount-ZamanAsimi) then break;
end;
Re: Application.ProcessMessages
- Sadece bir öneridir;
(1) IslemiDurdur diye bir boolean değişken WHILE döngüsüne dahil edildiyse; break burada sorun yaratmaz ama yerine bu boolean değişkeni TRUE yaparak kullanmak daha rasyonel olurdu.
(2) Hatta bu değişkene de gerek kalamadan direkt ( GetTickCount < (baslangic+ZamanAsimi) ) durumunu while kurgusunda yer alsa da olurdu.
(3) Internet bağlantı kontrolünü nasıl yapıyorsunuz ( internetgetconnectedstate WinInet'in fonksiyonu mu yoksa başka bir procedure'mü vs.) eğer bu noktada donma olursa yine aynı donma olacaktır.
(1) IslemiDurdur diye bir boolean değişken WHILE döngüsüne dahil edildiyse; break burada sorun yaratmaz ama yerine bu boolean değişkeni TRUE yaparak kullanmak daha rasyonel olurdu.
(2) Hatta bu değişkene de gerek kalamadan direkt ( GetTickCount < (baslangic+ZamanAsimi) ) durumunu while kurgusunda yer alsa da olurdu.

(3) Internet bağlantı kontrolünü nasıl yapıyorsunuz ( internetgetconnectedstate WinInet'in fonksiyonu mu yoksa başka bir procedure'mü vs.) eğer bu noktada donma olursa yine aynı donma olacaktır.
Kod: Tümünü seç
const
ZamanAsimi = 60 *1000; // milisaniye cinsinden olduğundan
var
baslangic : Cardinal;
begin
baslangic:=GetTickCount;
while ( (not internetgetconnectedstate( .... ))
and ( GetTickCount < (baslangic+ZamanAsimi) ) do
begin
Sleep(1);
Application.ProcessMessages;
end;
end;
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Application.ProcessMessages
Internet bağlantı kontrolünü internetgetconnectedstate WinInet'in fonksiyonu ile yapıyorum
Re: Application.ProcessMessages
(1) Eğer internet üzerinden veritabanı bağlantısı vs. yapmıyorsan (şahsi fikrimdir) bağlantı var mı yok mu kontrolüne gerek yok.
(2) Değerlendirmem odur ki, muhtemelen mobil bağlantılar üzerinden internet erişimin olmalı ki böyle bir kontrole ihtiyaç duymuşsundur. Try/Except içerisinde bağlantı çağrını yaparsın, sorun olursa kullanıcıya bildirirsin.
(3) Internet, kontrol etme ihtiyacı duyacak kadar sık kesiliyorsa belki de kontrol esnasında asıl görevini yapma fırsatını da kaçırmış olursun.
(2) Değerlendirmem odur ki, muhtemelen mobil bağlantılar üzerinden internet erişimin olmalı ki böyle bir kontrole ihtiyaç duymuşsundur. Try/Except içerisinde bağlantı çağrını yaparsın, sorun olursa kullanıcıya bildirirsin.
(3) Internet, kontrol etme ihtiyacı duyacak kadar sık kesiliyorsa belki de kontrol esnasında asıl görevini yapma fırsatını da kaçırmış olursun.
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Application.ProcessMessages
internet kontrolündeki amacım, program üzerinden email gönderme, sürüm kontrolü, sms gönderme gibi
işlemler için önceden internet bağlantısı var mı yok mu kullanıcıyı bilgilendirmek amaçlıdır.
ben internetgetconnectedstate fonksiyonunu try except arasında kullanıyorum ama internet bağlantısında
problem varsa yine de donmalar ve beklemeler olabiliyor. Bu açıdan soru sormuştum.
işlemler için önceden internet bağlantısı var mı yok mu kullanıcıyı bilgilendirmek amaçlıdır.
ben internetgetconnectedstate fonksiyonunu try except arasında kullanıyorum ama internet bağlantısında
problem varsa yine de donmalar ve beklemeler olabiliyor. Bu açıdan soru sormuştum.
Re: Application.ProcessMessages
- Sen de haklısın ne diyeyim, aslında donmanın önüne geçmek için asenkron olarak başka bir thread altında bunu sorgulayabilirsin.White Rose yazdı:internet kontrolündeki amacım, program üzerinden email gönderme, sürüm kontrolü, sms gönderme gibi
işlemler için önceden internet bağlantısı var mı yok mu kullanıcıyı bilgilendirmek amaçlıdır.
ben internetgetconnectedstate fonksiyonunu try except arasında kullanıyorum ama internet bağlantısında
problem varsa yine de donmalar ve beklemeler olabiliyor. Bu açıdan soru sormuştum.
(1) Proje çalıştığından INTERNET BAĞLANTISI YOK! haldedir.
(2) Başka bir THREAD ile ilk bağlantı kontrolünü yaparsın. Sorgu bitene kadar da bağlı değil olarak göstereceğinden proje içerisinden erişimi engellersin. Bu sorgu TIMER ile atıyorum 5 saniyede bir yinelensin. Aktif olunca TIMER dursun. Thread ile işin kalmasın.
(3) Bağlantı aktif ise INTERNET BAĞLANTISI AKTİF yaparsın. Proje içerisinden internet ile ilgili işlemlerin önünü açarsın.
(4) Her bağlantıdan önce thread ile değil, projenin aktif kanalından bağlantı var mı diye sorar, varsa sorgunu yaparsın.
(5) Bağlantı öncesi sorgu bağlantı yok şeklinde dönerse, INTERNET BAĞLANTISI YOK! haline dönersin. Bundan sonra işi yeniden diğer THREAD'e bırakırsın.
- ÖZET:
(a) Bağlantı yok ilen THREAD ile sorar, ana projendeki kilitlenmeyi engellersin.
(b) Bağlantı var iken thread kullanmadan normal eski sistem sorar öyle sorgularsın. Bağlantı sağlanamazsa o zaman yeniden bağlanana kadar işi THREAD'e bırakırsın.
Böyle bir strateji bence işini görecektir.

Re: Application.ProcessMessages
yüce gugıl saolsun, forumda aratmadım bile
http://forums.devshed.com/delphi-progra ... 39750.html
bu linklerde iki örnek var.
Kolay gele
http://forums.devshed.com/delphi-progra ... 39750.html
bu linklerde iki örnek var.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!