📄 singledloadunit.~pas
字号:
unit SingleDLoadUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient,IdGlobal,ShellAPI;
type
TSingleDLoadFm = class(TForm)
Animate1: TAnimate;
Panel1: TPanel;
CheckBox1: TCheckBox;
BitBtn2: TBitBtn;
BitBtn1: TBitBtn;
Bevel1: TBevel;
ProgressBar1: TProgressBar;
BitBtn3: TBitBtn;
DownLoadTcp: TIdTCPClient;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
SaveDialog1: TSaveDialog;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure DownLoadTcpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure DownLoadTcpWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure DownLoadTcpWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure Edit3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
TmpFName:String;
AlreadyReadLen,ReadFileLen:integer;
DownStream,ExistStream:TMemoryStream;
public
{ Public declarations }
end;
implementation
Uses unit1,Unit1UseUnit;
var
SingleDLoadFm:TSingleDLoadFm;
{$R *.dfm}
procedure TSingleDLoadFm.BitBtn1Click(Sender: TObject);
var
RetStr:String;
iReturn:integer;
SaveFStream:TFileStream;
begin
if Form1.ConnectRemoteHost(DownLoadTcp,Form1.TheFileConnectRec) then
begin //============================================================
Animate1.Active:=True;
Bitbtn1.Enabled:=False;
try //发送下载的文件
DownLoadTcp.Write('文件下载'+EOL); //1-------SendfileCMD
DownLoadTcp.Write(Edit3.Text+Edit1.Text+EOL);//2-------SendfileName
except
DownLoadTcp.Disconnect;
Animate1.Active:=False;
beep;
Self.Caption:='提示:网络信息发送失败!';
exit;
end;
TmpFName:=Edit2.Text+'\'+Edit1.Text;
//================================文件接续
Try
if FileExists(TmpFName) then
begin
SaveFStream:=TFileStream.Create(TmpFName,fmOpenReadWrite);
AlreadyReadLen:=SaveFStream.Size;
end
else
begin
SaveFStream:=TFileStream.Create(TmpFName,fmCreate);
AlreadyReadLen:=0;
end;
except
beep;
beep;
Self.Caption:='错误提示:请重新指定下载目录!';
exit;
end;
//===============================
Try
DownLoadTcp.WriteInteger(AlreadyReadLen);//---send filePos文件位置
except
SaveFStream.free;
Animate1.Active:=False;
DownLoadTcp.Disconnect;
Self.Caption:='错误提示:网络信息发送失败!';
exit;
end;
try
iReturn:=DownLoadTcp.ReadInteger;
RetStr:=DownloadTcp.ReadLn(EOL);
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active:=False;
Self.Caption:='错误提示:远程网络断开,接收失败!';
exit;
end;
if RetStr='OK' then //------------------------读取接收标志
begin //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//读数据------------------------开始-----
Try
ReadFileLen:=DownLoadTcp.ReadInteger;
except
SaveFStream.free;
DownLoadTcp.Disconnect;
Animate1.Active:=False;
Self.Caption:='错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.Position:=SaveFStream.Size;
ProgressBar1.Max:=ReadFileLen+AlreadyReadLen;
ProgressBar1.Position:=0;
try
DownLoadTcp.ReadStream(SaveFStream,ReadFileLen);
except
SaveFStream.Free;
Animate1.Active:=False;
DownLoadTcp.Disconnect;
Self.Caption:='错误提示:远程网络断开,接收失败!';
exit;
end;
SaveFStream.free; //下载成功
Bitbtn3.Enabled:=True;
beep;
Self.Caption:='下载完毕! 共:'+IntToStr(ProgressBar1.Max)+'字节';
ProgressBar1.Position:=ProgressBar1.Max;
Sleep(100);
if Self.Tag=1 then
DelRemoteFile(Edit3.Text+Edit1.Text,Form1.IdFTCPClient);
DownLoadTcp.Disconnect;
Animate1.Active:=False;
if checkBox1.Checked then Close;
exit;
end; //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
DownLoadTcp.Disconnect;//
Self.Caption:='反馈提示:远程文件定位失败,连接断开!';
Animate1.Active:=False;
Bitbtn1.Enabled:=True;
exit;
end;//============================================================
beep;
Self.Caption:='提示:网络连接失败!';
end;
procedure TSingleDLoadFm.BitBtn2Click(Sender: TObject);
begin
Animate1.Active:=false;
DownLoadTcp.Disconnect;
close;
end;
procedure TSingleDLoadFm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DownLoadTcp.Disconnect;
DownStream.Free;
ExistStream.Free;
end;
procedure TSingleDLoadFm.FormCreate(Sender: TObject);
begin
ProgressBar1.Position:=0;
DownStream:=TMemoryStream.Create;
ExistStream:=TMemoryStream.Create;
end;
procedure TSingleDLoadFm.BitBtn3Click(Sender: TObject);
begin
ShellExecute(Application.Handle, 'OPEN',
PChar(TmpFName),'','', SW_SHOWNORMAL);
Close;
end;
procedure TSingleDLoadFm.DownLoadTcpWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar1.Position:=0;
ProgressBar1.Max:=AlreadyReadLen+AWorkCountMax;
end;
procedure TSingleDLoadFm.DownLoadTcpWorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
Self.Caption:='下载完毕!共下载文件'+IntToStr(ReadFileLen+AlreadyReadLen)+'字节';
end;
procedure TSingleDLoadFm.DownLoadTcpWork(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCount: Integer);
var
ThePos:int64;
begin
ThePos:=ProgressBar1.Position;
ProgressBar1.Position:=AlreadyReadLen+AWorkCount;
Self.Caption:='正在下载:'+
IntToStr(ThePos*100 div ProgressBar1.Max)+'%';
end;
procedure TSingleDLoadFm.Edit3MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
(Sender as TEdit).Hint:=(Sender as TEdit).Text;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -