Kod Akışının Sonuna Gitmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
malitutuncu
Üye
Mesajlar: 18
Kayıt: 21 Şub 2017 04:27

Kod Akışının Sonuna Gitmek

Mesaj gönderen malitutuncu »

Merhaba,
Konu ile görsel resim:
Resim


Bir buton altında iç içe prosedür ve fonksiyonlarım var. Ve butona tıklanınca TwebBrowser ve Veritabanı işlemlerini oldukça çok kullanmaktayım.

Problem:
TWebBrowser'ı beklenenURL ve gonderilenURL lere bakarak kullanmaktayım.
beklenenURL = gonderilenURL eşitse sayfanın yüklenmesi tamamlanmış oluyor. Ve bu olmadıkça while döngüsü içerisinde dönüyorum. Bazen site hata veriyor doğal olarak beklenenURL hiç bir zaman gonderilenURL e eşit olmuyor. while içerisinde takılıp kalıyorum.

Yapılan:
Şöyle bir şey yapayım dedim. Form'a bir timer attım.
Timer1.interval = 10000 yaptım.

Kod: Tümünü seç

timerURLTimer(Sender: TObject);
begin
   xStop : True //xStop Global Boolean değişken
   Application.MessageBox(PChar('Bir hata oluştu..'), 'Hata', mb_Ok or MB_ICONERROR);
   TwebBrowser1.Free; 
   timerURL.Enabled := False;
end;
dedim

Kod: Tümünü seç

TWebBrowser1DocumentComplete
begin
if xStop then
   begin
      timerURL.Enabled := False;
      timerURL.Enabled := True;
   end;
end;
dedim.

Main'e de hepsini kapsayan bir try-Except bloğu attım.
Bir prosedür yada fonksiyon un bir yerinde takılı kalırsam 10 saniye sonra TwebBrowser'i free ettiğim için TWebBrowser1DocumentComplete gittiğinde hata fırlıyor, böylece E_Procedur ünde bir hata alsamda Mainden yakalamış oluyorum. Yani Mainde ki kod bloğunun sonuna gelmiş oluyorum.

Not:
Netten Thread konularına baktım ancak TwebBrowserla thread içerisinde bir işlem yapamadım, hata verdi.
_____________________________________________________________________________________
Merak Ettiğim:
Yani iç içe Prosedür/foksiyonlarda en içtekinden bir hata fırlatılsa en dıştakinden yakalamak.
Bu yaptığım doğrumudur yada mantıklı mıdır?
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen ertank »

Merhaba, WebBrowser sayfa yükleme ile ilgili kodunuzu paylaşabilir misiniz?
malitutuncu
Üye
Mesajlar: 18
Kayıt: 21 Şub 2017 04:27

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen malitutuncu »

Kod: Tümünü seç

webGoURL(wbBack, EOAInfo.BaseURL+K1_LINK.G_OKULBILGILERI, EOAInfo.BaseURL+K1_LINK.B_OKULBILGILERI, xBeklenenURL, xTamam)
begin
  try
    xTamam := False;
    xBeklenenURL := aBeklenenURL;
    aWb.Navigate(agidilecekURL, $02, null, null);
    while NOT xTamam do
    begin
      Application.ProcessMessages;
      if xStop = 1 then
        begin
            aWb.Stop;
            Exit;
        end;
    end;
  Except
    begin
      aWb.Stop;
      Exit;
    end;
  end;
end;
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen ertank »

Aşağıdaki şekilde kodunuzu değiştirerek deneyebilir misiniz?

Kod: Tümünü seç

webGoURL(wbBack, EOAInfo.BaseURL+K1_LINK.G_OKULBILGILERI, EOAInfo.BaseURL+K1_LINK.B_OKULBILGILERI, xBeklenenURL, xTamam)
begin
  aWb.Navigate(agidilecekURL, $02, null, null);
  while aWb.ReadyState <> READYSTATE_COMPLETE do
  begin
    Application.ProcessMessages();
  end;
end;
malitutuncu
Üye
Mesajlar: 18
Kayıt: 21 Şub 2017 04:27

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen malitutuncu »

Merhaba,
Daha önce bunu denemiştim ancak bir butona tıklayıp listelenen tablo yualıp içindeki verileri almam gerektiğinde şöyle bir durumla karşılaşmıştım.
Butona tıklayıp direk devam ediyordu sayfanın url adresi değişmiyordu ama üst tarafı sabitken alt tarafı yeniliyordu. Formdan çözüm olarak başlamadan önce beklenenURL ve gidilecekURL yi gönderiyorum bu şekilde sanki sayfa yükleniyormuş gibi bekleyebiliyorum. Foruma tekrar baktım ama bir türlü uyguladığım çözümü tekrar bulamadım.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen ertank »

Sorun yaşadığınız URL'yi paylaşmanız mümkün müdür?
malitutuncu
Üye
Mesajlar: 18
Kayıt: 21 Şub 2017 04:27

Re: Kod Akışının Sonuna Gitmek

Mesaj gönderen malitutuncu »

Hocam ben şurada

viewtopic.php?f=2&t=30520&p=167011&hili ... te#p167011

mrmarman hocamızın 1.yöntei gibi yazdım projemi ve burada sorduğum

https://e-okul.meb.gov.tr/

Örnegin: login yapmak için ad,şifre post ettik. karşımıza gelecek olan sayfa https://e-okul.meb.gov.tr/Main.aspx sayfası

xGonderilen : ' https://e-okul.meb.gov.tr/';
xBeklenen : 'https://e-okul.meb.gov.tr/Main.aspx' belirledik
Giriş tuşuna bastıktan sonra beklediğimiz gibi gelmedi bizi tekrar
https://e-okul.meb.gov.tr/ sayfasına attı. bu sebeble while döngüsünün içinde sonsuz olarak dönüyor

Kod: Tümünü seç

xBeklenenURL := aBeklenenURL;
    aWb.Navigate(agidilecekURL, $02, null, null);
    while NOT xTamam do
    begin
      Application.ProcessMessages;
     if xStop = 1 then
        begin
            aWb.Stop;
            Exit;
        end;
    end;
bende bunu halletmek için eğer bi URL yi 10sn ye beklediysem ve gelmediyse hata almışımdır mantığında bir Stop değişkeni belirleyip
her url yüklendiğinde timer başlatıp 10 saniye sonra webbrowseri free ediyorum ve while dongusunde tekrar dönerken aWb.navigate satırına gelince hatayı basıyor. bunuda mainde butonun altında yakalıyorum. Sorumun aslı şu

MainProsedür içerisinde AProsedürü
Aprosedürünün içerisinde BProsedürü
BProsedürünün içerisinde CProsedürü
CProsedürünün içerisinde DFonksiyonu var.
Ve DFonksiyonunun içinde alınan hatayı MainProsedüründe try-Except bloguyla yakalıyorum.

Ve Main in neresinde olursam oluyum kod akışının sonuna gitmiş oluyorum.

Doğru bir şeymi?
Cevapla