📄 thttpgetthread.~h
字号:
//---------------------------------------------------------------------------
#ifndef THttpGetThreadH
#define THttpGetThreadH
//---------------------------------------------------------------------------
#include <Wininet.h>
#include <Classes.hpp>
//---------------------------------------------------------------------------
typedef void __fastcall(__closure *TOnHttpNotify)(TObject *Sender,int Index);
typedef void __fastcall(__closure *TOnHttpCompelete)(TObject *Sender,int Index);
typedef void __fastcall(__closure *TOnHttpGetFileSize)(TObject *Sender,int FileSize);
typedef void __fastcall(__closure *TOnProgressEvent)(TObject *Sender,int Position,int Max,int Index);
typedef void __fastcall(__closure *TOnHttpStatusText)(TObject *Sender,AnsiString Msg,int Index);
typedef void __fastcall(__closure *TOnError)(TObject *Sender,int errorcode);
//TNotifyEvent
//---------------------------------------------------------------------------
#define HTTPGET_BUFFER_MAX 1024
class THttpGetThread : public TThread
{
private:
int FIndex; // 在线程数组中的索引
int FRepeatCount; // 错误时重复次数
char Buffer[HTTPGET_BUFFER_MAX+4];
TObject *FOwner;
AnsiString FURL;
AnsiString FOutFileName;
AnsiString FHostName; // 主机名
AnsiString FDownPath; // 下载文件的路径和文件名
HINTERNET FhSession;
HINTERNET FhConnect;
HINTERNET FhRequest;
int iFileHandle;
int FFileSize;
DWORD dwStart; // 下载开始的位置
DWORD dwTotal; // 需要下载的字节数
// 属性变量
DWORD FGetBytes; // 下载的总字节数
bool FSuccess; // 下载是否成功
bool FConnected; // 是否连接
bool FFromBreakpoint; // 从断点开始下载
// 事件变量
TOnHttpNotify FOnAbort;
TOnError FOnError;
TOnHttpCompelete FOnComplete;
TOnHttpGetFileSize FOnGetFileSize;
TOnProgressEvent FOnProgress;
TOnHttpStatusText FOnStatusText;
// 内部方法
void ParseURL(void);
void StartHttpGet(void);
void DoHttpGet(void);
void EndHttpGet(void); // 结束下载
void DoOnComplete(void);
void DoOnError(int errorcode);
void DoOnProgress(int Position);
void DoOnGetFileSize(int Size);
void DoOnStatusText(AnsiString Text);
DWORD OpenOutFile(void);
protected:
void __fastcall Execute();
public:
__fastcall THttpGetThread(TObject *Owner);
void __fastcall Stop(void) { EndHttpGet(); }
int __fastcall GetWebFileSize(void);
bool __fastcall SetFilePointer(void);
__published:
__property AnsiString URL = { read=FURL, write=FURL };
__property AnsiString OutFileName = { read=FOutFileName, write=FOutFileName};
__property bool Successed = { read=FSuccess};
__property bool Connected = { read=FConnected};
__property bool FromBreakpoint = { read=FFromBreakpoint, write=FFromBreakpoint};
__property int Index = { read=FIndex, write=FIndex};
__property DWORD StartPostion = { read=dwStart, write=dwStart};
__property DWORD GetBytes = { read=dwTotal, write=dwTotal};
__property TOnHttpCompelete OnComplete = { read=FOnComplete, write=FOnComplete };
__property TOnHttpNotify OnAbort = { read=FOnAbort, write=FOnAbort };
__property TOnError OnError = { read=FOnError, write=FOnError };
__property TOnHttpGetFileSize OnGetFileSize = { read=FOnGetFileSize, write=FOnGetFileSize };
__property TOnProgressEvent OnProgress = { read=FOnProgress, write=FOnProgress };
__property TOnHttpStatusText OnStatusText = { read=FOnStatusText, write=FOnStatusText };
};
//---------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -