Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Copiar ficheros con progressbar (https://www.clubdelphi.com/foros/showthread.php?t=68787)

vivamotos 07-07-2010 10:12:03

Copiar ficheros con progressbar
 
Buenos días,

He encontrado la manera en delphi pero no tengo ni idea como se hace en c++ builder, lo que quisiera hacer yo es teniendo un componente TProgressBar quisiera copiar un fichero grande y que muestre el progreso, esto hecho en c++ builder.

Como se hace?

Grácias.

waremovil 07-07-2010 11:27:10

Hola, supongo que se puede hacer de varias maneras...

yo lo haría cargando el fichero en un buffer o en un objeto TMemoryStream ó en algo mas apropiado si lo hay....

entonces calcularia el tamaño y deduciría cuantos ciclos de 1024 bytes tendrian que usarse

acto seguido calcularia el "step" del progressBar a medida de mis ciclos y empezaría la copia "streamIn <- buffer , buffer -> StreamOut" en ciclos de 1024 e incrementaría el STEP del progressbar en cada vuelta

no sé si me he explicado y si es la forma óptima, pero de primeras se me ocurre esta manera

un saludo

vivamotos 07-07-2010 12:36:22

Más sencillo
 
En delphi hay otra forma y es mucho más sencillo, seguro que alguien sabe algo más i si puede ser algo de código que no se como ponerlo lo del progressbar.

Grácias.

escafandra 07-07-2010 17:39:37

Si, es sencillo: CopyFileEx

Saludos.

madiazg 07-07-2010 19:33:46

Hola,
¿puedes indicarme como se realiza en delphi?
Saludos...

vivamotos 08-07-2010 08:53:59

Delphi
 
Quisiera esto pero en c++ builder


Problem/Question/Abstract:

Does anyone have an example of using CopyFileEx with a CopyProgressRoutine? I have created a function that takes the same parameters as the CopyProgressRoutine, but when I pass it using @ or Addr() I get a Variable Required error message.

Answer:

Let's assume you call CopyFileEx and want the callback to update a progress bar. The callback cannot be an objects method but you can use the lpData parameter of CopyFileEx to pass any kind of data to the callback, e.g. a form reference. So, if you want to serve a progress form in the callback that would look like this (untested !):

type
TProgressForm = class(TForm)
AbortButton: TButton;
ProgressBar: TProgressBar;
procedure AbortButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FCancel: BOOL;
end;
{form has fsStayOnTop formstyle!}

implementation

{$R *.DFM}

procedure TProgressForm.AbortButtonClick(Sender: TObject);
begin
FCancel := True;
end;

{Note: could use int64 instead of COMP, but that would make this D4 specific}

function CopyCallback(TotalFileSize, TotalBytesTransferred, StreamSize,
StreamBytesTransferred: COMP; dwStreamNumber, dwCallbackReason: DWORD;
hSourceFile, hDestinationFile: THandle; progressform: TProgressForm): DWORD; stdcall;
var
newpos: Integer;
begin
Result := PROCESS_CONTINUE;
if dwCallbackReason = CALLBACK_CHUNK_FINISHED then
begin
newpos := Round(TotalBytesTransferred / TotalFileSize * 100);
with progressform.Progressbar do
if newpos <> Position then
Position := newpos;
Application.ProcessMessages;
end;
end;

function DoFilecopy(const source, target: string): Boolean;
var
progressform: TProgressForm;
begin
progressform := TProgressform.Create;
try
progressform.Show;
Application.ProcessMessages;
Result := CopyFileEx(PChar(source), PChar(target), @CopyCallback,
Pointer(progressform), @progressform.FCancel, 0);
finally
progressform.Hide;
progressform.free;
end;
end;

escafandra 08-07-2010 10:15:19

Puedes encontrar un ejemplo mas simplificado y en Builder aquí.
Y el mismo ejemplo en delphi, aquí.

Saludos.

vivamotos 08-07-2010 16:57:18

Muchísimas grácias funcionó perfectamente
 
Muchísimas grácias funcionó perfectamente

waremovil 08-07-2010 19:14:54

que maravilla, yo tb tomo nota :)

koalasoft 20-04-2017 18:20:26

Cita:

Empezado por escafandra (Mensaje 369659)
Puedes encontrar un ejemplo mas simplificado y en Builder aquí.
Y el mismo ejemplo en delphi, aquí.

Saludos.

Por que cuando quiero entrar a este enlace solo me aparece ..

Código:

Page not found

Sorry, we cannot find that page.

Please return to the home page…


escafandra 20-04-2017 18:36:21

Puedes encontrar un ejemplo mas simplificado y en Builder aquí.
Y el mismo ejemplo en delphi, aquí.

Saludos.


La franja horaria es GMT +2. Ahora son las 17:19:21.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi