TWebBrowser NavigateError prosedürü tanımlı değil

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

TWebBrowser NavigateError prosedürü tanımlı değil

Mesaj gönderen ahmetax »

Merhaba,
Delphi7 üzerinde TWebBrowser ve TEmbeddedWB bileşenlerini kullanıyorum.
Bugün farkına vardım ki TWebBrowser bileşeni OnNavigateError özelliğine sahip değil. Oysa bu özellik TEmbeddedWB bileşeninde mevcut ve internetten gördüğüm kadarıyla TWebBrowser bileşeninde de olması lazım. Delphi7 yüzünden böyle bir kısıtlama olup olmadığını bilemiyorum.
TEmbeddedWB kullanımını tamamiyle iptal edeyim demiştim ama, şimdi işler karıştı.
Browser üzerinden bazı hataları yakalamam gerekiyor.
Önerisi olan var mı?
Teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TWebBrowser NavigateError prosedürü tanımlı değil

Mesaj gönderen mrmarman »

Merhaba.

- Bilebileceğiniz bir şey olabilir, şimdiden kusura bakmayın.

- Bazı hataları yakalayıp bu hatalara göre bir şeyler mi yapmak istiyorsunuz. Aksi halde WebBRowser'in Silent property'sini TRUE yapınca bu hatalar yok sayılıyor, durmadan devam edilebiliyor.

- Diğer yandan Delphi 7 vazgeçilmezinden yola çıkarak : üç (3) seçeneğiniz var.
(1) Internet.Application olarak bir ComObj yolu izleyebilir, hataları HTML parse yoluyla elde edebilirsiniz.
(2) Bir EVENT olarak ise Delphi 7'de Import ActiveX ile güncel InternetExplorer kütüphanesini IDE'ye dahil edersiniz.
(3) 'InternetExplorer.Application' olarak bir ComObj uygulaması şeklinde erişir, (2) nolu seçeneği import olmaksızın elde edersiniz.

- 2 nolu çözümü bende Delphi 2007 olmasına rağmen sizin için şöyle denedim.
Örnekte, "www.yyy.com" gibi olmayan bir site URL'sine erişim sırasında Explorer penceresine henüz uyarı düşmeden önce biz yakalamış olduk. Tabi istediğiniz şey benzeri tip bir event uygulaması ise...

Kod: Tümünü seç

Uses SHDocVw_TLB;

Var
  xIEApp     : TCppInternetExplorer;
  xIEppHand  : THandle;

function HataKoduCozumle( iHataKodu: Integer ): String;
begin
  case iHataKodu of
  -2146697214 : Result := 'INET_E_INVALID_URL                          ';//(0x800C0002L or )
  -2146697213 : Result := 'INET_E_NO_SESSION                           ';//(0x800C0003L or )
  -2146697212 : Result := 'INET_E_CANNOT_CONNECT                       ';//(0x800C0004L or )
  -2146697211 : Result := 'INET_E_RESOURCE_NOT_FOUND                   ';//(0x800C0005L or )
  -2146697210 : Result := 'INET_E_OBJECT_NOT_FOUND                     ';//(0x800C0006L or )
  -2146697209 : Result := 'INET_E_DATA_NOT_AVAILABLE                   ';//(0x800C0007L or )
  -2146697208 : Result := 'INET_E_DOWNLOAD_FAILURE                     ';//(0x800C0008L or )
  -2146697207 : Result := 'INET_E_AUTHENTICATION_REQUIRED              ';//(0x800C0009L or )
  -2146697206 : Result := 'INET_E_NO_VALID_MEDIA                       ';//(0x800C000AL or )
  -2146697205 : Result := 'INET_E_CONNECTION_TIMEOUT                   ';//(0x800C000BL or )
  -2146697204 : Result := 'INET_E_INVALID_REQUEST                      ';//(0x800C000CL or )
  -2146697203 : Result := 'INET_E_UNKNOWN_PROTOCOL                     ';//(0x800C000DL or )
  -2146697202 : Result := 'INET_E_SECURITY_PROBLEM                     ';//(0x800C000EL or )
  -2146697201 : Result := 'INET_E_CANNOT_LOAD_DATA                     ';//(0x800C000FL or )
  -2146697200 : Result := 'INET_E_CANNOT_INSTANTIATE_OBJECT            ';//(0x800C0010L or )
  -2146697196 : Result := 'INET_E_REDIRECT_FAILED                      ';//(0x800C0014L or )
  -2146697195 : Result := 'INET_E_REDIRECT_TO_DIR                      ';//(0x800C0015L or )
  -2146697194 : Result := 'INET_E_CANNOT_LOCK_REQUEST                  ';//(0x800C0016L or )
  -2146697193 : Result := 'INET_E_USE_EXTEND_BINDING                   ';//(0x800C0017L or )
  -2146697192 : Result := 'INET_E_TERMINATED_BIND                      ';//(0x800C0018L or )
  -2146697191 : Result := 'INET_E_INVALID_CERTIFICATE                  ';//(0x800C0019L or )
  -2146696960 : Result := 'INET_E_CODE_DOWNLOAD_DECLINED               ';//(0x800C0100L or )
  -2146696704 : Result := 'INET_E_RESULT_DISPATCHED                    ';//(0x800C0200L or )
  -2146696448 : Result := 'INET_E_CANNOT_REPLACE_SFP_FILE              ';//(0x800C0300L or )
  -2146695936 : Result := 'INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY  ';//(0x800C0500L or )
  -2146696192 : Result := 'INET_E_CODE_INSTALL_SUPPRESSED              ';//(0x800C0400L or )
  else Result := 'Hatayı Bilemedim :) KOD:' + IntToStr(iHataKodu);
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  // MSDN Adresi  : https://msdn.microsoft.com/en-us/library/bb268221(v=vs.85).aspx
  // Hata Kodları :
  if NOT Assigned(xIEApp) then
  begin
    xIEApp                 := TCppInternetExplorer.Create(self);
    xIEApp.OnNavigateError := OnNavigateError;
// Forma koyduğum Panel üzerinde göstermek için...
    Windows.SetParent( xIEApp.HWND, Panel1.Handle );
    xIEppHand              := FindWindowEx( Panel1.Handle, 0, Nil, Nil );
    xIEApp.Visible := True;
    Panel1Resize(Panel1);
  end;
  Application.ProcessMessages;
  xIEApp.Navigate('http://www.yyy.com');
end;

procedure TForm1.OnNavigateError(ASender: TObject;
  const pDisp: IDispatch; var URL, Frame, StatusCode: OleVariant;
  var Cancel: WordBool);
begin
  ShowMessageFmt( 'HATA: %s', [ HataKoduCozumle( Integer(StatusCode) )] );
end;

procedure TForm1.Panel1Resize(Sender: TObject);
Var
  WinRect: TRect;
begin
  if Assigned(xIEApp) then begin
    GetWindowRect( xIEppHand, WinRect);
    MoveWindow(xIEppHand, 0, 0, TPanel(sender).Width, TPanel(sender).Height, True);
  end;
end;
Resim
Dosya ekleri
WebBrowser_OnNavigateError_Delphi7.rar
WebBrowser için D7'de olmayan OnNavigateError alternatif Delphi'ye Import Edilen InternetExplorer ile çalışma örneği...
(216.38 KiB) 55 kere indirildi
Resim
Resim ....Resim
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

Re: TWebBrowser NavigateError prosedürü tanımlı değil

Mesaj gönderen ahmetax »

Teşekkürler Muharrem bey.
Bana da mantıklı ve pratik gelen ikinci seçenek. Ancak çok uzun zamandır ne bileşen ne de activex yükleyip kaldırmakla uğraşmadığım için bir sürü temel bilgiyi unutmuşum.
Mevcut yüklü Microsoft Internet Controls 1.0 (Version 1.0) Activex'ini "Remove" etmeye kalktığımda, "Gerçeklenmemiş." gibi abuk bir hata penceresi karşıma çıkıyor.
İnternette de böyle bir hata mesajı ve durum ile ilgili bilgi bulamadım.
Eğer başka bir çözüm yolu bulamazsam, üçüncü seçeneği deneyebilirim.
Tekrar teşekkürler.
İyi akşamlar.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TWebBrowser NavigateError prosedürü tanımlı değil

Mesaj gönderen mrmarman »

Mesaj ekinde yaptığım örneği görmemiş olabilirsiniz, bir indirip deneyin takıldığınız yer olursa yardımcı olurum.

Import edince oluşan TLB unit de içine dahil ettim.

Başarılar
Resim
Resim ....Resim
ahmetax
Üye
Mesajlar: 60
Kayıt: 14 Kas 2014 12:17

Re: TWebBrowser NavigateError prosedürü tanımlı değil

Mesaj gönderen ahmetax »

Tekrar merhaba Muharrem Bey,
Bir haftadır foruma girme fırsatı bulamadım. Ancak bu arada temel sorunumun TEmbeddeWB veya TWebBrowser bileşenlerinden veya onları kullanma yöntemlerinden kaynaklanmadığı ortaya çıktı.
Programımda çok sayıda anonim proxy değerleri arasında rasgele geçişler yapıyordum.
Bu proxyleri kullanmaya başlamadan önce test edip erişilir olanları ayıkladım ve programda bu çalışır durumdaki proxyleri kullandım.
Daha doğrusu öyle sanmışım!...
Meğerse bu proxylerin pek çoğunun ömrü çok kısaymış. O kadarını tahmin etmemiştim.
Bir süre sonra bu proxylerin neredeyse tamamı işlemez hale gelmiş.
Şimdi belli aralarla proxy listemi -çoğu kez manuel olarak- yeniden kontrol ediyor, devre dışı kalanları eliyorum. Bir yandan da yenilerini ekliyorum.
Bu arada sizin önerdiğiniz proxy oturum fonksiyonları da devrede. Gayet güzel çalışıyorlar.
İzninizle bir şey daha soracağım. Ara sıra proxy kullanmadan bağlanmak için sadece oturumu sonlandırmak yeterli olmuyor mu? Çünkü bazen, hatalı bir proxy'den hemen sonra proxysiz bağlantının da web sitesine ulaşamadığını gözlüyorum. Ayrı bir temizleme işlemi gerekiyor mu?
Bu arada sizin ve tüm arkadaşların geçmiş bayramını da kutluyorum.
Selamlar, sevgiler.
Cevapla