Obsluga zdarzenia niezaladowanej strony Webbrowser

0

witam, jak moge wykonac jakies zdarzenie kiedy strona ktora chcialem zaladowac w webbrowserze nie zostanie wyswietlona ?

0

Skoro musisz (lub koniecznie chcesz) babrać się z tym WebBrowser to mozna i zalecam zamiast TWebBrowser użyć TEmbeddedWB tak samo bazuje na Internet Explorer ma obsługę zdarzenia OnNavigateError i wielu innych przydatnych rzeczy których nie ma TWebBrowser. Do pobrania z http://www.bsalsa.com/downloads.html.
Drugie wyjście zrobić własny WebBrowser bazujący na TWebBrowser tylko po prostu dodać mu reakcję na DISPID_NAVIGATEERROR czyli w sumie napisać właśnie obsługę zdarzenia OnNavigateError http://msdn.microsoft.com/en-us/library/aa768286%28v=vs.85%29.aspx

type
  TOnNavigateError = procedure(ASender: TObject; const pDisp: IDispatch;
    const URL, Frame, StatusCode: OleVariant; var Cancel: WordBool) of object;

  TMyWB = class(TWebBrowser)
  private
    fOnNavigateError: TOnNavigateError;
  protected
    procedure InvokeEvent(DispID: TDispID; var Params: TDispParams); override;
  published
    property OnNavigateError: TOnNavigateError read fOnNavigateError write
      fOnNavigateError;
  end;
procedure TMyWB.InvokeEvent(DispID: TDispID; var Params: TDispParams);
var
  Count, i: Integer;
  VarArray: TVariantArray;
  Cancel: WordBool;
begin
  if DispID = 271 {DISPID_NAVIGATEERROR} then
  begin
    if Assigned(fOnNavigateError) then
    begin
      Count:= Params.cArgs;
      SetLength(VarArray, Count);
      for i:= Low(VarArray) to High(VarArray) do
        VarArray[High(VarArray) - i] := OleVariant(Params.rgvarg^[i]);
      Cancel:= VarArray[4];
      if Assigned(fOnNavigateError) then
        fOnNavigateError(Self, VarArray[0], VarArray[1], VarArray[2], VarArray[3], Cancel);
      {to Cancel chyba nie działa (albo inaczej rozumiem dokumentacje) i nie wiem jak to poprawnie zrobić :/ }
      Params.rgvarg^[4].vbool:= Cancel;
    end;
  end;
  inherited;
end;

W uses musi być: SHDocVw, ActiveX, OleServer

EDIT// w nowszych Delphi (nie wiem od której wersji w każdym razie w 7 nie ma a w XE2 jest) obsługa OnNavigateError jest wbudowana

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