关于IDFTP上传时显示进度的问题 当IDFTP是从控件面板拖过去的时候,我可以直接在Events里找到Onwork事件双击现在的IDFTP是在进程中动态生成的,如何让刷新主线程的界面啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 动态绑定事件http://hi.baidu.com/daoshan/blog/item/1feaa3cc5fd7a20e01e92807.html unit Unit2;interfaceuses Classes,IdFTP,dialogs,SysUtils,windows,IdComponent,IDException,WinSock;function connFtp(fileName:String):boolean;type TOrderSThread = class(TThread) filePath:string; protected procedure updateData(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer); procedure Execute; override; end;implementation uses unit1;procedure TOrderSThread.Execute;begin FreeOnTerminate := True; connFtp(filePath);end;function connFtp(fileName:String):boolean;varIdFTP:TIdFTP;fs: TFileStream;tempStrem:TMemoryStream;iFileSize:integer;begintry fs := TFileStream.Create(fileName, fmOpenReadWrite); IdFTP := TIdFTP.Create(nil); IdFtp.OnWork := updateData; IdFTP.Host := '192.168.2.230'; IdFTP.Port := 21; IdFTP.Username := 'admin'; IdFTP.Password := '123456'; if not idftp.Connected then IdFTP.Connect(); iFileSize := IdFTP.Size(ExtractFileName(fileName)); if iFileSize = -1 then begin idftp.Put(fs,ExtractFileName(fileName)); end else if fs.Size <= iFileSize then begin SendMessage(Form1.Handle,WM_FTPWORK,1,iFileSize); end else begin tempStrem := TMemoryStream.Create; while fs.Size > iFileSize do begin fs.Position := iFileSize; if fs.Size - iFileSize > 1048576 then begin tempStrem.CopyFrom(fs,1048576); iFileSize := iFileSize + 1048576; end else begin tempStrem.CopyFrom(fs,fs.Size-iFileSize); iFileSize := fs.Size; end; IdFTP.Put(tempStrem, ExtractFileName(fileName), true);//最后一个参数就是打开Append,续传方式 tempStrem.Clear; end; end;except on E:EIdSocketError do begin SendMessage(Form1.Handle,WM_FTPWORK,0,e.LastError); end;end;end;procedure TOrderSThread.updateData(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);begin SendMessage(Form1.Handle,WM_FTPWORK,0,integer(pchar(timetostr(Now))));end;end.运行时提示 [Error] Unit2.pas(34): Undeclared identifier: 'updateData' 大家往panel上拖控件都用什么布局方式啊?? VCL 制作问题 在DBGRID中,以便对selectedrows进行操作。在程序中如何解决将几条记录设为被选中状态。 一个初级问题,在线等。 200分求解,如何在TWebBrowser中能实现复制操作! 问个小问题,我做的程序在E文window2K下不能运行?为什么 Delphi6.0中有模函数吗? if then else 的用法. 修改注册表的时候一些问题跟调用系统工具的问题! 祝大家新年快乐! sql语句的使用问题 如何获取Google地图的指定的路径每隔100的经纬度??
http://hi.baidu.com/daoshan/blog/item/1feaa3cc5fd7a20e01e92807.html
unit Unit2;interface
uses Classes,IdFTP,dialogs,SysUtils,windows,IdComponent,IDException,WinSock;
function connFtp(fileName:String):boolean;type
TOrderSThread = class(TThread)
filePath:string;
protected
procedure updateData(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure Execute; override;
end;implementation
uses unit1;procedure TOrderSThread.Execute;
begin
FreeOnTerminate := True;
connFtp(filePath);
end;
function connFtp(fileName:String):boolean;
var
IdFTP:TIdFTP;
fs: TFileStream;
tempStrem:TMemoryStream;
iFileSize:integer;
begin
try
fs := TFileStream.Create(fileName, fmOpenReadWrite);
IdFTP := TIdFTP.Create(nil);
IdFtp.OnWork := updateData;
IdFTP.Host := '192.168.2.230';
IdFTP.Port := 21;
IdFTP.Username := 'admin';
IdFTP.Password := '123456';
if not idftp.Connected then
IdFTP.Connect(); iFileSize := IdFTP.Size(ExtractFileName(fileName));
if iFileSize = -1 then
begin
idftp.Put(fs,ExtractFileName(fileName));
end
else if fs.Size <= iFileSize then
begin
SendMessage(Form1.Handle,WM_FTPWORK,1,iFileSize);
end
else
begin
tempStrem := TMemoryStream.Create;
while fs.Size > iFileSize do
begin
fs.Position := iFileSize;
if fs.Size - iFileSize > 1048576 then
begin
tempStrem.CopyFrom(fs,1048576);
iFileSize := iFileSize + 1048576;
end
else
begin
tempStrem.CopyFrom(fs,fs.Size-iFileSize);
iFileSize := fs.Size;
end;
IdFTP.Put(tempStrem, ExtractFileName(fileName), true);//最后一个参数就是打开Append,续传方式
tempStrem.Clear;
end;
end;
except
on E:EIdSocketError do
begin
SendMessage(Form1.Handle,WM_FTPWORK,0,e.LastError);
end;end;
end;
procedure TOrderSThread.updateData(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
SendMessage(Form1.Handle,WM_FTPWORK,0,integer(pchar(timetostr(Now))));
end;
end.运行时提示 [Error] Unit2.pas(34): Undeclared identifier: 'updateData'