Kod Akışının Sonuna Gitmek

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

Kod Akışının Sonuna Gitmek

Mesaj gönderen malitutuncu » 13 Ara 2017 04:16

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
Üye
Mesajlar: 964
Kayıt: 11 Eyl 2015 11:45

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

Mesaj gönderen ertank » 14 Ara 2017 02:05

Merhaba, WebBrowser sayfa yükleme ile ilgili kodunuzu paylaşabilir misiniz?

malitutuncu
Üye
Mesajlar: 14
Kayıt: 21 Şub 2017 03:27

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

Mesaj gönderen malitutuncu » 14 Ara 2017 04:50

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
Üye
Mesajlar: 964
Kayıt: 11 Eyl 2015 11:45

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

Mesaj gönderen ertank » 14 Ara 2017 06:46

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: 14
Kayıt: 21 Şub 2017 03:27

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

Mesaj gönderen malitutuncu » 15 Ara 2017 09:36

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
Üye
Mesajlar: 964
Kayıt: 11 Eyl 2015 11:45

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

Mesaj gönderen ertank » 15 Ara 2017 10:38

Sorun yaşadığınız URL'yi paylaşmanız mümkün müdür?

malitutuncu
Üye
Mesajlar: 14
Kayıt: 21 Şub 2017 03:27

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

Mesaj gönderen malitutuncu » 15 Ara 2017 02:10

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