FileDownLoadFrm.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. {*******************************************************************************
  2. 单元名称: FileDownLoadFrm.pas
  3. 单元说明: 通用的文件下载进度窗体,下载完退出程序,并运行刚下载的文件。
  4. 作者时间: Chenshilong, 2016-08-10
  5. *******************************************************************************}
  6. unit FileDownLoadFrm;
  7. interface
  8. uses
  9. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10. Dialogs, Gauges, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  11. IdTCPClient, IdHTTP, ShellAPI;
  12. type
  13. TFileDownLoadForm = class(TForm)
  14. lblFileName: TLabel;
  15. gDown: TGauge;
  16. ITPDown: TIdHTTP;
  17. procedure ITPDownWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  18. const AWorkCountMax: Integer);
  19. procedure ITPDownWork(Sender: TObject; AWorkMode: TWorkMode;
  20. const AWorkCount: Integer);
  21. procedure ITPDownWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  22. private
  23. FURL: string;
  24. FFileName: string;
  25. FLocalFile: string;
  26. procedure SetURL(const Value: string);
  27. { Private declarations }
  28. public
  29. { Public declarations }
  30. property URL: string read FURL write SetURL;
  31. function DownFile: Boolean;
  32. end;
  33. implementation
  34. {$R *.dfm}
  35. { TFileDownLoadForm }
  36. procedure TFileDownLoadForm.ITPDownWorkBegin(Sender: TObject;
  37. AWorkMode: TWorkMode; const AWorkCountMax: Integer);
  38. begin
  39. gDown.MinValue := 0;
  40. gDown.Progress := 0;
  41. gDown.MaxValue := AWorkCountMax;
  42. end;
  43. procedure TFileDownLoadForm.ITPDownWork(Sender: TObject;
  44. AWorkMode: TWorkMode; const AWorkCount: Integer);
  45. begin
  46. gDown.Progress := AWorkCount;
  47. end;
  48. procedure TFileDownLoadForm.ITPDownWorkEnd(Sender: TObject;
  49. AWorkMode: TWorkMode);
  50. begin
  51. //
  52. end;
  53. procedure TFileDownLoadForm.SetURL(const Value: string);
  54. var s: string;
  55. begin
  56. FURL := Value;
  57. // 反斜杠 ExtractFileName 函数搞不定,这里先转换
  58. s := StringReplace(FURL, '/', '\', [rfReplaceAll, rfIgnoreCase]);
  59. FFileName := ExtractFileName(s);
  60. FLocalFile := 'Web\' + FFileName;
  61. lblFileName.Caption := FFileName;
  62. lblFileName.Update;
  63. end;
  64. function TFileDownLoadForm.DownFile: Boolean;
  65. var
  66. vStream: TMemoryStream;
  67. begin
  68. Result := False;
  69. if Trim(URL) = '' then Exit;
  70. vStream := TMemoryStream.Create;
  71. try
  72. try
  73. ITPDown.Get(URL, vStream);
  74. vStream.SaveToFile(FLocalFile);
  75. Result := True;
  76. ShellExecute(Handle, 'open', pchar(FLocalFile), nil, nil, SW_SHOWNORMAL);
  77. Application.Terminate;
  78. except
  79. Result := False;
  80. end;
  81. finally
  82. vStream.Free;
  83. end;
  84. end;
  85. end.