将事件添加到动态创建的对象 - Webcopy - TMS Software

时间:2015-02-01 13:31:28

标签: delphi delphi-2010 dynamically-generated

我尝试将事件添加到TMS Software中名为webcopy的动态创建组件中。代码适用于添加到表单的静态组件,但如果我想创建一个动态的代码,我就无法执行不同的事件。

除了部分事件webcopy.OnFileDone之外,以下代码正常工作:

public
  { Public declarations }

  procedure delete_file_after_upload(Sender:TObject; idx:integer);
end;

procedure Tform2.delete_file_after_upload(Sender:TObject; idx:integer);
begin
showmessage('FILENAME"'+upload_filename+'" SUCCESSFULLY UPLOADED TO FTP');
deletefile(upload_filename);
end;

procedure upload_file_to_ftp(filename,ftp_host,ftp_port,ftp_user,ftp_password,ftp_directory:string);
var webcopy:Twebcopy;
begin
   try
      webcopy:=Twebcopy.Create(NIL);
      Webcopy.Items.Clear;

      with WebCopy.Items.Add do
      begin
         {upload_filename = global variable so i can delete it after succesfully uploading it to ftp}
         upload_filename:=filename;

         protocol := wpFtpUpload;

         URL:=filename; // local file that is input
         FTPHost := ftp_host;
         FtpPort := strtoint(ftp_port);
         FTPUserID := ftp_user;
         FTPPassword := ftp_password;
         TargetDir := ftp_directory;   // path to use on FTP server

         {after the uploading process is done I want to delete the file from pc}
         webcopy.OnFileDone:= Form2.delete_file_after_upload;
    end;

   finally
      WebCopy.Execute;
      freeandnil(webcopy);
   end;
end;

1 个答案:

答案 0 :(得分:1)

处理程序必须具有适当的签名。

事件处理程序的类型定义为

TWebCopyFileDone = procedure(Sender:TObject; idx:integer) of object;

因此,您的处理程序过程必须是某个类的方法(这是of object的意思),并接受两个参数,TObject和Integer。

例如:

procedure TForm2.delete_file_after_upload(Sender:TObject; idx:integer);
begin
  ...

您还必须将方法声明添加到public的{​​{1}}部分。