Copiar archivos con CopyFileEx y barra de progreso en delphi

On miércoles, 8 de diciembre de 2010 0 comentarios

Un ejemplo sencillo en delphi para copiar archivos con la API CopyFileEx, una barra de progreso, un botón de inicio y un botón de cancelación.

Código: [Seleccionar]
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Cancel: boolean;
 
implementation
 
{$R *.dfm}
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: Pointer): DWORD; stdcall;
var
   Value: integer;
begin
   Application.ProcessMessages();
   if(dwCallbackReason = CALLBACK_CHUNK_FINISHED) then
      Form1.ProgressBar1.Position:= (int64(TotalBytesTransferred) * 100) div int64(TotalFileSize);
 
   Result:= PROGRESS_CONTINUE;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Cancel:= false;
  CopyFileEx(Fuente, Destino, @ProgressRoutine, nil, @Cancel, 0);
  ShowMessage(SysErrorMessage(GetLastError()));
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Cancel:= true;
end;
 
end.

También para Builder aquí.

Saludos.

0 comentarios:

Publicar un comentario