|
Events

The must important events are called in the following order:
OnBeginningTransaction OnAuthenticate (if authentication is
needed) OnResponse repeating until complete:
OnProgress OnData OnComplete
OnBeginningTransaction:
You can use this event to add additional headers to the HTTP request. It is
most likely when you use method POST or PUT.
If you assign a string to IEDownload.AdditionalHeader it will be added
automatically, and you don't need to use this event.
The following sample shows how to use additionalheader and Postdata i a POST
call:
procedure
TForm1.Button1Click(Sender: TObject); begin with
IEDownload1 do begin Method := POST; AdditionalHeader :=
'Content-Type:application/x-www-form-urlencoded\r\n'; PostData :=
'Firstname=Per&Lastname=Larsen';
Go('http://localhost/posttest.asp'); end; end;
|
For more info: IHttpNegotiate--BeginningTransaction
Method
OnResponse:
Allows you to examine the response headers, optionally terminate the bind
operation, and add HTTP headers to a request before resending the request.
By default download is canceled if responsecode is between 400-499 (e.g. 404
: Not Found). You can trap this in OnComplete (see
later).
Sender.QueryInfo is useful to get more information about
the resource you are about to download and the server you are communicating
with. See demo "IEDownloadDemo".
Return E_ABORT (or IEDownload1.cancel(sender)) to cancel the download
or S_OK to continue.
The demo "LinkCheck" is a link-validator. It grabs the responsecode in
OnResponse and always return E_ABORT, since only the headers are needed to
determine if the page is available.
For more info: IHttpNegotiate--OnResponse
Method
OnAuthenticate:
This event is called before OnResponse if Password/username or other
authentication is needed to access the URL. You can provide Username/Password
here and continue the process. If you don't provide authentication OnResponse
will return Responsecode 401 (Unauthorized).
You can use either:
IEDownload1.Username:='iedelphi'; IEDownload1.PassWord:='seamonkey';
before you call IEDownload1.Go('TheURL')
or in OnAutheticate add:
function
TForm1.IEDownload1Authenticate(Sender: TBSCB; var hwnd: HWND; var
szUserName, szPassWord: PWideChar): HRESULT; begin if
Sender.Url = 'TheUrl' then begin szUsername :=
'iedelphi'; szPassword := 'seamonkey'; end; Result :=
S_OK; end;
|
For more info: IAuthenticate--Authenticate
Method Q156905 -
SAMPLE- Progress Uses IAuthenticate to Bind to Secured Web Page
OnProgress:
Keeps you informed about the download progress.
The following values are available:
Sender (The binding the information
is valid for)
ulProgress (Bytes downloaded so far)
ulProgressMax
(total filesize)
ulStatusCode (Bindstatus). You can use the function
BindstatusText(ulStatusCode) to get textinformation about the
bindstatus.
szStatusText (additional information).
The following list shows the possible values of ulStatuscode and information
in szStatustext:
- BINDSTATUS_FINDINGRESOURCE
- Notifies the client application that the bind operation is
finding the resource that holds the object or storage being bound to. The
szStatusText parameter provides the display name of the resource being
searched for (for example, "www.microsoft.com").
- BINDSTATUS_CONNECTING
- Notifies the client application that the bind operation is
connecting to the resource that holds the object or storage being bound to. The
szStatusText parameter provides the display name of the resource being
connected to (for example, an IP address).
- BINDSTATUS_REDIRECTING
- Notifies the client application that the bind operation has
been redirected to a different data location. The szStatusText parameter
provides the display name of the new data location.
- BINDSTATUS_BEGINDOWNLOADDATA
- Notifies the client application that the bind operation has
begun receiving the object or storage being bound to. The szStatusText
parameter provides the display name of the data location.
- BINDSTATUS_DOWNLOADINGDATA
- Notifies the client application that the bind operation
continues to receive the object or storage being bound to. The
szStatusText parameter provides the display name of the data
location.
- BINDSTATUS_ENDDOWNLOADDATA
- Notifies the client application that the bind operation has
finished receiving the object or storage being bound to. The szStatusText
parameter provides the display name of the data location.
- BINDSTATUS_BEGINDOWNLOADCOMPONENTS
- Notifies the client application that the bind operation is
beginning to download the component.
- BINDSTATUS_INSTALLINGCOMPONENTS
- Notifies the client application that the bind operation is
installing the component.
- BINDSTATUS_ENDDOWNLOADCOMPONENTS
- Notifies the client application that the bind operation has
finished downloading the component.
- BINDSTATUS_USINGCACHEDCOPY
- Notifies the client application that the bind operation is
retrieving the requested object or storage from a cached copy. The
szStatusText parameter is nil.
- BINDSTATUS_SENDINGREQUEST
- Notifies the client application that the bind operation is
requesting the object or storage being bound to. The szStatusText
parameter provides the display name of the object (for example, a file
name).
- BINDSTATUS_CLASSIDAVAILABLE
- Notifies the client application that the CLSID of the resource
is available.
- BINDSTATUS_MIMETYPEAVAILABLE
- Notifies the client application that the MIME type of the
resource is available.
- BINDSTATUS_CACHEFILENAMEAVAILABLE
- Notifies the client application that the temporary or cache
file name of the resource is available. The temporary file name might be
returned if NOWRITECACHE is set in Options. The temporary file will be deleted
once the storage is released.
- BINDSTATUS_BEGINSYNCOPERATION
- Notifies the client application that a synchronous operation
has started.
- BINDSTATUS_ENDSYNCOPERATION
- Notifies the client application that the synchronous operation
has completed.
- BINDSTATUS_BEGINUPLOADDATA
- Notifies the client application that the file upload has
started.
- BINDSTATUS_UPLOADINGDATA
- Notifies the client application that the file upload is in
progress.
- BINDSTATUS_ENDUPLOADINGDATA
- Notifies the client application that the file upload has
completed.
- BINDSTATUS_PROTOCOLCLASSID
- Notifies the client application that the CLSID of the protocol
handler being used is available.
- BINDSTATUS_ENCODING
- Notifies the client application that the Urlmon.dll is encoding
data.
- BINDSTATUS_VERFIEDMIMETYPEAVAILABLE
- Notifies the client application that the verified MIME type is
available.
- BINDSTATUS_CLASSINSTALLLOCATION
- Notifies the client application that the class install location
is available.
- BINDSTATUS_DECODING
- Notifies the client application that the bind operation is
decoding data.
- BINDSTATUS_LOADINGMIMEHANDLER
- Notifies the client application that a pluggable MIME handler
is being loaded. This value was added for Microsoft® Internet Explorer 5.
- BINDSTATUS_CONTENTDISPOSITIONATTACH
- Notifies the client application that this resource contained a
Content-Disposition header that indicates that this resource is an attachment.
The content of this resource should not be automatically displayed. Client
applications should request permission from the user. This value was added for
Internet Explorer 5.
- BINDSTATUS_FILTERREPORTMIMETYPE
- Notifies the client application of the new MIME type of the
resource. This is used by a pluggable MIME filter to report a change in the MIME
type after it has processed the resource. This value was added for Internet
Explorer 5.
- BINDSTATUS_CLSIDCANINSTANTIATE
- Notifies the Urlmon.dll that this CLSID is for the class the
Urlmon.dll should return to the client on a call to IMoniker.BindToObject. This
value was added for Internet Explorer 5.
- BINDSTATUS_IUNKNOWNAVAILABLE
- Reports that the IUnknown interface has been released. This
value was added for Internet Explorer 5.
- BINDSTATUS_DIRECTBIND
- Reports whether or not the client application is connected
directly to the pluggable protocol handler. This value was added for Internet
Explorer 5.
- BINDSTATUS_RAWMIMETYPE
- Reports the MIME type of the resource, before any code sniffing
is done. This value was added for Internet Explorer 5.
- BINDSTATUS_PROXYDETECTING
- Reports that a proxy server has been detected. This value was
added for Internet Explorer 5.
- BINDSTATUS_ACCEPTRANGES
- Reports the valid types of range requests for a resource. This
value was added for Internet Explorer 5.
ElapsedTime, Speed and EstimatedTime shows the time since download began,
transfer speed (kb/sec) and estimated time remaining.
The
following code shows how to get user-friedly information from the OnProgress
event:
procedure
TForm1.IEDownload1Progress(Sender: TBSCB; ulProgress, ulProgressMax,
ulStatusCode: Cardinal; szStatusText: PWideChar; ElapsedTime, Speed,
EstimatedTime: string); begin Label1.Caption := 'Elapsed time: ' +
ElapsedTime; Label2.Caption := 'Speed: ' + Speed; Label3.Caption :=
'Estimated time: ' + EstimatedTime; if ulStatusCode =
BINDSTATUS_DOWNLOADINGDATA then Memo1.lines.add(BindStatusText(ulStatusCode)
+ '(' + InttoStr(ulProgress) + '/' + InttoStr(ulprogressmax) +
')') else Memo1.lines.add(BindStatusText(ulStatusCode)); end; |
The progress in memo1 looks like this:
Finding resource... Connecting... Sending
request... MIME type available... Beginning to download
data... Downloading data... (7015/14934) Downloading data...
(11395/14934) Downloading data... (14934/14934) Ending data
download...
and Labels:
Elapsed time: 00:03:42 Speed: 7.28 kb/sec Estimated time:
00:12:36
For more info: IBindStatusCallback--OnProgress
Method
OnData:
Use this function, if you need the data as they come in. You receive a
pointer to a buffer and the bufferlength.
You can parse/edit the data 'on the fly', but you are responsible for
returning the proper bufferlength, if it has changed.
OnComplete:
Download operation is completed for the URL in Sender.Url. use the result
parameter to determine the result of the operation.
If result=S_OK
(0) you can get the data from Stream
If you have cancelled the
process, the result value is E_ABORT.
If result is E_ABORT you might want to check the value of property
Sender.ResponseCode, since the reason for termination could be that the
requested url was not found (Responsecode 404) and not cancelled by user.
To get a text representation of other results, you can use
ErrorText(result).
The following code shows all data in a memobox
after a successful download has been completed:
procedure
TForm1.IEDownload1Complete(Sender: TBSCB; Stream: TStream;Result:
HRESULT); begin if result=0 then
memo2.lines.loadfromstream(stream); end;
|
|