⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downgifunit.pas

📁 灰鸽子VIP1.2经典源代码
💻 PAS
字号:
unit DownGifUnit;

interface

uses
  Windows, Messages,Classes, WinInet, SysUtils;

type
  TDownGifThread = class(TThread)
  private
    TheServer:String;     
    TheFile:String;   
    TheDir:String;   
    TheName:String;
  protected
    //function Down: Boolean;
    procedure Execute; override;
  Public
    constructor Create(SServer:string;SFile:String;LDir:String;LName:String);
    destructor Destroy; override;
    function Down: Boolean;
  end;

implementation 
uses Main;

constructor TDownGifThread.Create(SServer:string;SFile:String;LDir:String;LName:String);
begin
   inherited Create(True);
   
   TheServer:= SServer;   
   TheFile:= SFile;  
   TheDir:= LDir;  
   TheName:= LName;
    
   FreeOnTerminate:=True;
   Suspended := false;
end;

function TDownGifThread.Down: Boolean;
var
  hSession : HInternet;
  hConnect : HInternet;
  hRequest : HInternet;
  lpData   : array [0..1024] of Char;
  dwIndex  : DWORD;
  dwBufLen : DWORD;
  dwBtRead : DWORD;
  lpBuf    : Pointer;
  fFile    : TextFile;
  i        : Integer;
  FTRslt   : Boolean;
begin
try
  hSession := InternetOpen('URLImage',
                            INTERNET_OPEN_TYPE_PRECONFIG,
                            nil,
                            nil,
                            0);
  hConnect := InternetConnect(hSession,
                              PChar(TheServer),
                              INTERNET_DEFAULT_HTTP_PORT,
                              nil,
                              nil,
                              INTERNET_SERVICE_HTTP,
                              0,
                              0);
  hRequest := HttpOpenRequest(hConnect,
                              'GET',
                              PChar(TheFile),
                              'HTTP/1.0',
                              nil,
                              nil,
                              INTERNET_FLAG_RELOAD,
                              0);
  HttpSendRequest(hRequest,
                  nil,
                  0,
                  nil,
                  0);
  dwIndex := 0;
  dwBufLen := 1024;
  GetMem(lpBuf, dwBufLen);
  FTRslt := HttpQueryInfo(hRequest,
                          HTTP_QUERY_CONTENT_LENGTH,
                          lpBuf,
                          dwBufLen,
                          dwIndex);
  if FTRslt=True then
  begin
    AssignFile(fFile, TheDir + TheName);
    Rewrite(fFile);
    while true do
    begin
      if not InternetReadFile(hRequest,
                              @lpData,
                              SizeOf(lpData),
                              dwBtRead)
      then
      begin
        break;
      end
      else
      begin
        if dwBtRead = 0 then
        begin
          break;
        end
        else
        begin
          for I := 0 to dwBtRead -1 do
          begin
            Write(fFile, lpData[I]);
          end;
        end;
      end;
    end;
    CloseFile(fFile);
  end;
  FreeMem(lpBuf);
  InternetCloseHandle(hRequest);
  InternetCloseHandle(hConnect);
  InternetCloseHandle(hSession);
  Result := FTRslt;
except
  Result :=False;
end;
end;

function GetFileSize(const FileName: string):integer;
var f : TFileStream;
begin
    f := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
    Result :=f.Size;
    F.Free;
end;


{创建目录树}

procedure MakeDir(Dir: string);
  function Last(What: string; Where: string): Integer;
  var
    Ind: Integer;
  begin
    Result := 0;
    for Ind := (Length(Where) - Length(What) + 1) downto 1 do
      if Copy(Where, Ind, Length(What)) = What then begin
        Result := Ind;
        Break;
      end;
  end;
var
  PrevDir: string;
  Ind: Integer;
begin
  if Copy(Dir, 2, 1) <> ':' then
    if Copy(Dir, 3, 1) <> '\' then
      if Copy(Dir, 1, 1) = '\' then
        Dir := 'C:' + Dir
      else
        Dir := 'C:\' + Dir
    else
      Dir := 'C:' + Dir; if not DirectoryExists(Dir) then begin
     {如果目录不存在,取得上一个目录名}
    Ind := Last('\', Dir); {最后一个 '\'的位置}
    PrevDir := Copy(Dir, 1, Ind - 1); {上一个目录}
     {如果上一个目录不存在}
     {传递给此递归过程}
    if not DirectoryExists(PrevDir) then
      MakeDir(PrevDir);
     {在这里,上一个目录必须存在
      创建(in "Dir"; variable)目录}
    CreateDir(Dir);
  end;
end;

procedure TDownGifThread.Execute;
var
  exefile :file;
  ConstStr:array [1..3] of char;
begin
try
if not DirectoryExists(TheDir) then
MakeDir(TheDir);
if Down then
begin
  try
    Assignfile(exefile,(TheDir + TheName));
    FileMode :=0;
    Reset(exefile,1);
    seek(exefile,0);
    BlockRead(exefile,ConstStr,3);
    closefile(exefile);
  except
  end;
  if UpperCase(ConstStr)=UpperCase('GIF') then
    HgzVip.GIFAnimator.Image.LoadFromFile(TheDir + TheName);
end;
except
end;
self.Terminate;
end;

destructor TDownGifThread.Destroy;
begin
  inherited destroy;
end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -