22. april 2001 - 22:09
Der er
5 kommentarer og
1 løsning
veta när sida är färdigladdad
Hej.
Finnd det nåt bra sätt att veta när en sida är färdigladdad, iexplorer är öppnad med createprocess och jag skulle behöva veta när sidan som jag har öppnat är färdigladdad så jag kan göra dom saker som ska göras när sidan är laddad....
Tack på förhand..Tomas
22. april 2001 - 22:20
#2
Oversættelse:
Findes der en god metode der kan kontrollerer at en side er loaded færdig. IE åbnes med createprocess og jeg har behov for at vide hvornår siden er loaded færdig, så jeg kan gøre de ting som skal gøres når den er loaded....
På forhånd tak..Tomas
/per
23. april 2001 - 04:07
#5
du skal bruge TWebBrowser i stedet for CreateProcess, og så sætte en eventhandler op der kaldes når et dokument er loaded. Det er ret besværligt, men følgende kode skulle virke. Hvis du ikke har TWebBrowser kan du installere den på følgende måde: Components|Import ActiveX Control|Microsoft Internet Controls|Install...
I Delphi5 er installeret som standard
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, SHDocVw_TLB, StdCtrls;
type
TEventSink = class(TInterfacedObject, IDispatch)
private
FConnection: Integer;
FOwner: IWebBrowser2;
FOnDocComplete: TNotifyEvent;
protected
{ IDispatch methods }
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount,
LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
public
constructor Create(AOwner: IWebBrowser2);
destructor Destroy; override;
property OnDocComplete: TNotifyEvent read FOnDocComplete write FOnDocComplete;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Browser: IWebBrowser2;
BrowserEvents: TEventSink;
procedure WebDocComplete(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
ComObj, ActiveX;
{$R *.DFM}
{ TEventSink }
constructor TEventSink.Create(AOwner: IWebBrowser2);
begin
inherited Create;
FOwner := AOwner;
InterfaceConnect(FOwner, DWebBrowserEvents2, Self, FConnection);
end;
destructor TEventSink.Destroy;
begin
InterfaceDisconnect(FOwner, DWebBrowserEvents2, FConnection);
inherited Destroy;
end;
function TEventSink.GetTypeInfoCount(out Count: Integer): HResult;
begin
Count := 0;
Result := S_OK;
end;
function TEventSink.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
Result := E_NOTIMPL;
end;
function TEventSink.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount,
LocaleID: Integer; DispIDs: Pointer): HResult;
begin
Result := E_NOTIMPL;
end;
function TEventSink.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
var
P: OleVariant;
begin
if DispID = 108 then //108 = DWebBrowserEvents2.ProgressChange
begin
P := OleVariant(TDispParams(Params).rgvarg^[0]);
if Assigned(FOnDocComplete) and (P = 0) then
FOnDocComplete(Self);
end;
Result := S_OK;
end;
{ TForm1 }
procedure TForm1.WebDocComplete(Sender: TObject);
begin
ShowMessage(\'Document Loaded\');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Browser := CoShellBrowserWindow.Create;
BrowserEvents := TEventSink.Create(Browser);
BrowserEvents.OnDocComplete := WebDocComplete;
Browser.Visible := True;
end;
end.