Hallo,
Ik heb een eigen compont voor het updaten/downloaden via internet.
Hierbij ondervind ik teveel problemen bij het maken van de verbinding en downloaden. (proxy, firewall, htaccess)
Indy, IdHTTP blijkt hier de oplossing!
Standalone werkt alles prima, nu nog onderbrengen in mijn eigen component...
Ik wil de events van IdHTTP (OnConnected, OnWorkBegin, OnWork etc.) door de evenknie van mijn eigen component laten uitvoeren.
Code:
constructor TXWebUpdate.Create(AOwner: TComponent);
//*************************************************
begin
Inherited Create(AOwner);
FProductInfo := TProductInfo.Create;
FTagInfo := TTagInfo.Create;
FInfo := TStringList.Create;
FVersion := WebUpdateVersion;
FIdHTTP := TIdHTTP.Create(nil);
with FIdHTTP do
begin
FIdHTTP.OnConnected := OnAfterConnect;
FIdHTTP.OnWorkBegin := OnStartDownload;
FIdHTTP.OnWork := OnDownload;
end;
FOptions := [];
FHTTPPort := 80;
FDebug := False;
FDebugFile := 'c:\Temp\XWebUpdate_Debug.html';
// Create
end;
Dit blijkt niet te werken...
Wanneer ik dezelfde code in een procedure zet werkt het wel?
Code:
procedure TXWebUpdate.GetFile(FURL: String;
FUserName: String; FPassword: String;
FProxyName: String; FProxyPort: Integer; FProxyUserName: String; FProxyPassword: String;
var FHTMLString: String;
FSaveToFile: Boolean; FFileName: String);
//********************************************************************************************************************
var
HostName, FileName: String;
HttpCode: Integer;
Flags: OleVariant;
HTMLDocument: IHTMLDocument2;
HTMLBodyElem: IHTMLBodyElement;
oleTekst : OleVariant;
F: TextFile;
begin
while True do
begin
try
FIdHTTP.OnConnected := OnAfterConnect;
FIdHTTP.OnWorkBegin := OnStartDownload;
FIdHTTP.OnWork := OnDownload;
...
Mijn eigen OnAfterConnect wordt nu wel aangeroepen en uitgevoerd.
Declaraties:
Code:
TXWebUpdate = class(TComponent)
Private
FUserName: String;
FPassword: String;
FProxyName: String;
FProxyPort: Integer;
FProxyUserName: String;
FProxyPassword: String;
FFileName: String;
FErrorStr: String;
FHTMLString: String;
FInfo: TstringList;
FOnBeforeConnect: TNotifyEvent;
FOnAfterConnect: TNotifyEvent;
FOnConnectError: TConnectErrorEvent;
FOnStartDownload: TWorkBeginEvent;
FOnDownload: TWorkEvent;
FOnEndDownload: TWorkEndEvent;
FOnDownloadError: TDownloadErrorEvent;
FOnNoUpdateFound: TNotifyEvent;
...
protected
procedure DoBeforeConnect; virtual;
procedure DoAfterConnect; virtual;
procedure DoConnectError(Const ErrorStr: String); virtual;
procedure DoStartDownload(AWorkMode: TWorkMode; const ASize: Int64 = 0); virtual;
procedure DoDownload(AWorkMode: TWorkMode; const ACount: Int64); virtual;
procedure DoDownloadComplete(AWorkMode: TWorkMode); virtual;
procedure DoDownloadError(Const ErrorStr: String); virtual;
procedure GetFile(FURL: String;
FUserName: String; FPassword: String;
FProxyName: String; FProxyPort: Integer; FProxyUserName: String; FProxyPassword: String;
var FHTMLString: String;
FSaveToFile: Boolean; FFileName: String);
...
public
Constructor Create(AOwner: TComponent); Override;
Destructor Destroy; Override;
property HTMLString: String read FHTMLString;
procedure GetInfoFile;
...
published
property UserName: String read FUserName write FUserName;
property Password: String read FPassword write FPassword;
property ProxyName: String read FProxyName write FProxyName;
property ProxyPort: Integer read FProxyPort write FProxyPort;
property ProxyUserName: String read FProxyUserName write FProxyUserName;
property ProxyPassword: String read FProxyPassword write FProxyPassword;
property Options: TUpdateOptions read FOptions write FOptions;
property OnBeforeConnect: TNotifyEvent read FOnBeforeConnect write FOnBeforeConnect;
property OnAfterConnect: TNotifyEvent read FOnAfterConnect write FOnAfterConnect;
property OnConnectError: TConnectErrorEvent read FOnConnectError write FOnConnectError;
property OnStartDownload: TWorkBeginEvent read FOnStartDownload write FOnStartDownload;
property OnDownload: TWorkEvent Read FOnDownload write FOnDownload;
property OnEndDownload: TWorkEndEvent read FOnEndDownload write FOnEndDownload;
property OnDownloadError: TDownloadErrorEvent Read FOnDownloadError Write FOnDownloadError;
...
end;
Aanroepen:
Code:
procedure TXWebUpdate.DoAfterConnect;
//***********************************
begin
if Assigned(FOnAfterConnect) then FOnAfterConnect(Self);
// DoAfterConnect
end;
Wat er gebeurt zal wel logisch zijn, maar kan iemand me dat uitleggen?
Gr.
Bookmarks