witam, jak moge wykonac jakies zdarzenie kiedy strona ktora chcialem zaladowac w webbrowserze nie zostanie wyswietlona ?
0
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