Application.ProcessMessages;

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sinemyldz
Üye
Mesajlar: 4
Kayıt: 21 Kas 2010 02:47

Application.ProcessMessages;

Mesaj gönderen sinemyldz »

arkadşlar hepnize merhaba öncelikle ben bi projemde takıldım yardımınıza ihtyacım var :/ şimdi şöyleki ben bir webbrowserı Navigate komutuyla sevkedince bu kod :

Kod: Tümünü seç

While WebBrowser1.ReadyState <> READYSTATE_Complete do
    Application.ProcessMessages;
programı bekletmek için işe yarıyor sonra site yüklenip ben değerleri girip örneğin şöyle bir kod yazınca :

Kod: Tümünü seç

WebBrowser1.OleObject.Document.GetElementByID('isyeri_guvenlik').Value := trim(Edit5.Text);
WebBrowser1.OleObject.Document.GetElementByID('buttonOK').Click;
bu kod ile

Kod: Tümünü seç

While WebBrowser1.ReadyState <> READYSTATE_Complete do
    Application.ProcessMessages;
programı bekletemiyorum sonraki işlemler webbrowser yüklenmediği için hata veriyor nası çözebilirim bunu bir türlü başedemedim yardmlarını bekliyorum :( çok teşekkür ederim şimdiden.
Kullanıcı avatarı
dabaddah
Üye
Mesajlar: 167
Kayıt: 13 Mar 2008 04:42
Konum: istanbul

Re: Application.ProcessMessages;

Mesaj gönderen dabaddah »

öncelikle;
sorduğun soru benim çok işime yaradı çünkü uzun zamandır webbrowser üzerinden açtığım sayfadaki elemanlara veri göndermek nasıl olur onu araştıryordum yazdığın kod tam benim aradığım şeydi bunun için çok teşekkür ederim ayrıca eğer açılan sayfadaki elemanların isimlerini nasıl buluruz bunuda biliyorsan ve burada paylaşırsan benim için çok iyi olur.

senin cevabına gelince ise;

Application.ProcessMessages programını bekletmez aksine uzun bir döngü döndüğün zaman yada bunun gibi durumlarda programının işler hale gelmesini ve diğer işlemleri yapabilmeni sağlar.

sen sayfa yüklenene kadar programını bekletmek istiyorsan sleep procedure ünü kullanman lazım
eğer

Kod: Tümünü seç

Sleep(1000);
dersen programın 1 saniye bekler Sleepin içine gönderdiğin parametre milisaniye cinsinden olmalıdır.

umarım işine yarar
iyi çalışmalar
insanın özü tanımasına engel olan perdeleri;
1.kendini beden sanma
2.vehmî benlik
3.beş duyu blokajları
4.toplumsal şartlanmalar ve şartlanmaların oluşturduğu değer yargıları ve değer yargılarından gelen duygular
kişi bu perdelerden arınmadıkça göresel kozasında yaşar ve bir ipek böceği gibi kaynar kazana atılır.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Application.ProcessMessages;

Mesaj gönderen orhancc »

Sayfa yüklemesini OnDocumentComplete ile kontrol edebilirsin daha sonra da istediğin işlemleri yapabilirsin.
Kullanıcı avatarı
The_aLiEn
Üye
Mesajlar: 28
Kayıt: 09 Kas 2010 02:35
Konum: Trabzon
İletişim:

Re: Application.ProcessMessages;

Mesaj gönderen The_aLiEn »

Maalesef yaramaz... Tek threadli çalışıldığından ana program içinde yazılan her sleep emri, main thread i dolayısıyla process i bloklamaya sokacaktır. Webbrowser bileşeninin oluşturduğu pop-up threadleri de, process bloklandığından dolayı koşma vakti bulamayacaktır. Siz tutup bir de "Webbrowser işini tamamlayana kadar processi blokla" (=Sleep(x)) derseniz, programınız deadlock a düşecek ve tepki vermeyi durduracaktır.

Bu yüzden vakit kaybetmeden çok threadli çalışmaya geçmelisiniz...

buyrun bu da sağlaması...
procedure TForm1.Button1Click(Sender: TObject);
var
a:cardinal;
begin
a:=GetTickCount;
WebBrowser1.Navigate('www.delphiturkiye.com');
While WebBrowser1.ReadyState <> READYSTATE_Complete do
//Application.ProcessMessages;
//sleep(0);
//sleep(1000);
asm
nop;
end;
Form1.Caption:=inttostr(GetTickCount-a);
end;
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 183
Kayıt: 01 Oca 2008 05:34

Re: Application.ProcessMessages;

Mesaj gönderen Commandx »

Kodları thread bileşeninin çalışma anına kodları yazınca donma olmuyor, bunu kullanın
Genelde donma olmaması için TidThread componenti kullanıyorum, Resimdeki gibipek bir donma olmuyor
Delphinin en güzel yeri Threadler, bu bileşeni kullanmayı unutmayın can alıcı yerlerde çok önemlidir.

Resim
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
sinemyldz
Üye
Mesajlar: 4
Kayıt: 21 Kas 2010 02:47

Re: Application.ProcessMessages;

Mesaj gönderen sinemyldz »

sevgili arkadaşlar teşkkür ederim üzgünüm cevap yazamadm.her seçeneği denedim ve şöyle bişey yaptım :

1)önce Bekle diye boolean tipinde bi değişkene ve false değeri atadım.

2)

Kod: Tümünü seç

while Bekle=False do Application.ProcessMessages;
Bekle:=false;
3)browserin OnDocumentComplete olayına ise :

Kod: Tümünü seç

Bekle:=True;
ve şu an çalışıyor ileride bir sorun çıkarırmı arkadaşlar bu bana acaba ?
Kullanıcı avatarı
The_aLiEn
Üye
Mesajlar: 28
Kayıt: 09 Kas 2010 02:35
Konum: Trabzon
İletişim:

Re: Application.ProcessMessages;

Mesaj gönderen The_aLiEn »

Browser a yeni bir iş göndermediğiniz sürece bir sorun olacağını düşünmüyorum. Riskli ama...
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Re: Application.ProcessMessages;

Mesaj gönderen aLonE CoDeR »

Hey gidi gençlik yıllarım, vaktiyle sabahlatmıştı bu konu :)

Bu sorunu teorik olarak bahsedilen yöntemlerle çözebilirsin fakat uygulamada garantisi yok maalesef (thread yöntemi dahil). Bu noktada inisiyatif kullanarak sayfada değişme olasılığı en düşük ve benzersiz ifadeleri tespit ederek kontrol etme yoluna gidebilirsin. Bu, sayfada ekrana yansıyan bir text olabileceği gibi kaynaktan bir html tag değeri de olabilir.

Kolay gele.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Re: Application.ProcessMessages;

Mesaj gönderen Murat DİCLE »

Sayfada hata olursa OnDocumentComplete işlemeyebilir. OnError gibi bir şeyi varsa veya benzer event'lar. Onlarade bir değer verebilirsin.

BEKLE := 0;

1. Eğer BEKLE = 0 ise beklemeye devam et..
2. BEKLE = 1 ise tama sayfa düzgün tamamlandı
3. BEKLE = 2 ise bir hata oldu.

**
OnDocumenComplete
BEKLE = 1

**
OnError (veya benzer şeyleri)
BEKLE = 2

Gibi birşey daha sağlıklı olur kanaatindeyim..

Not: süper kodlar :D
Cevapla