Application.ProcessMessages

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Application.ProcessMessages

Mesaj gönderen White Rose »

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.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Application.ProcessMessages

Mesaj gönderen Battosai »

Bahsettiğiniz kodu program kitlenmesine karşı döngü içinde kullanabilirsiniz. Döngü içinde nerede kullandığınızın önemi yok.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen csunguray »

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/)
nguzeller
Üye
Mesajlar: 109
Kayıt: 19 Oca 2004 03:29

Re: Application.ProcessMessages

Mesaj gönderen nguzeller »

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.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen White Rose »

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ı ?
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Application.ProcessMessages

Mesaj gönderen freeman35 »

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
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 !!!
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen White Rose »

freeman35 yazdı: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
internet kontrolü ile ilgili (internetgetconnectedstate) basit bir thread kodu yazabilir misiniz
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Application.ProcessMessages

Mesaj gönderen akdatilla »

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ı ?
Anladığım kadarıyla bu işlemi şu şekilde kolaylıkla yapabilirsiniz.

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;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen mrmarman »

- 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. :idea:

(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;
Resim
Resim ....Resim
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen White Rose »

Internet bağlantı kontrolünü internetgetconnectedstate WinInet'in fonksiyonu ile yapıyorum
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen mrmarman »

(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.
Resim
Resim ....Resim
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen White Rose »

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.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen mrmarman »

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.
- 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.

(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. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Application.ProcessMessages

Mesaj gönderen freeman35 »

yüce gugıl saolsun, forumda aratmadım bile
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 !!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Application.ProcessMessages

Mesaj gönderen mrmarman »

aklın yolu bir buna denmez de başka neye denir... :lol:
Resim
Resim ....Resim
Cevapla