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

📄 singledloadunit.pas

📁 DELPHI 下远程控制源码
💻 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 + -