Webbrowser - sposob na zdarzenie dla niezaladowanej strony

0

Witam, szukalem sposobu na wykonanie zdarzenie w przypadku gdy strona nie zostanie zaladowana w komponencie webbrowser. Wpadlem na pewien kod na jednej z zagranicznych stron, lekko go przerobilem i calosc wyglada tak:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var doc: IHTMLDocument2;
selection: IHTMLSelectionObject;
textRange: IHtmlTxtRange;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Selection := Doc.Selection;
TextRange :=selection.createRange as IHTMLTxtRange;

TextRange.collapse(false);

if TextRange.findText('Nawigacja do strony sieci Web została anulowana',1,0) or TextRange.findText('Ten program nie może wyswietlić strony sieci web',1,0)
then

begin

// wykonaj zdarzenie jesli strona sie nie wyswietli

end;

JAk widac program szuka zadanego tekstu. W naszym przypadku to:

  • Nawigacja do strony sieci Web została anulowana
  • Ten program nie może wyswietlić strony sieci web
    Czyli 2 komunikaty ktore pokazuja sie w webbrowser jesli strona sie nie zaladuje. Czy to dobre rozwiazanie problemu ? Dziala bez zarzutu
0

Nie wiem czy to ty zadawałeś pytanie kilka dni temu ale tu masz poprawną odpowiedź:

Obsluga zdarzenia niezaladowanej strony Webbrowser

Po prostu dodajesz zdarzenie OnNavigateError a w nim możesz sprawdzić StatusCode http://msdn.microsoft.com/en-us/library/bb268233%28v=vs.85%29.aspx i wywalić odpowiedni komunikat czy tam coś innego zrobić.

0

ok dzieki za linka. a podany przeze mnie kod nadaje sie do tego ?

0
aaaaaaaa napisał(a):

ok dzieki za linka. a podany przeze mnie kod nadaje sie do tego ?

Odpowiedz sobie na przykładzie tej historii:
Instalowałem Halo 2 demo, i wyskoczył mi błąd "Error while blablabla: Operacja zakończyła się pomyślnie". Zmienienie języka na Ang. naprawiło problem.

0

ok wiec wszystko jasne :)

nie chce zakladac nowego tematu czy wie ktos jak ustalic maksymalny czas ladowania strony w webbrowser ?

0

Nie wiem co dokładnie chcesz zrobić ale może wystarczy coś takiego:

//do uses DateUtils
const
  TIME_OUT = 5000;
var
  Time: TDateTime;
begin
  WebBrowser1.Navigate('http://4programmers.net');
  Time:= IncMilliSecond(Now, TIME_OUT);
  while (Now < Time) and (WebBrowser1.ReadyState <> READYSTATE_COMPLETE) do
    Application.ProcessMessages;
  if WebBrowser1.ReadyState <> READYSTATE_COMPLETE then
    WebBrowser1.Stop;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1