Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2010
vivamotos vivamotos is offline
Miembro
 
Registrado: ago 2006
Posts: 150
Poder: 18
vivamotos Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 07-07-2010
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #3  
Antiguo 07-07-2010
vivamotos vivamotos is offline
Miembro
 
Registrado: ago 2006
Posts: 150
Poder: 18
vivamotos Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 07-07-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Si, es sencillo: CopyFileEx

Saludos.
Responder Con Cita
  #5  
Antiguo 07-07-2010
madiazg madiazg is offline
Miembro
 
Registrado: sep 2005
Ubicación: Canarias
Posts: 120
Poder: 19
madiazg Va por buen camino
Hola,
¿puedes indicarme como se realiza en delphi?
Saludos...
Responder Con Cita
  #6  
Antiguo 08-07-2010
vivamotos vivamotos is offline
Miembro
 
Registrado: ago 2006
Posts: 150
Poder: 18
vivamotos Va por buen camino
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;
Responder Con Cita
  #7  
Antiguo 08-07-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Puedes encontrar un ejemplo mas simplificado y en Builder aquí.
Y el mismo ejemplo en delphi, aquí.

Saludos.
Responder Con Cita
  #8  
Antiguo 08-07-2010
vivamotos vivamotos is offline
Miembro
 
Registrado: ago 2006
Posts: 150
Poder: 18
vivamotos Va por buen camino
Muchísimas grácias funcionó perfectamente

Muchísimas grácias funcionó perfectamente
Responder Con Cita
  #9  
Antiguo 08-07-2010
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
que maravilla, yo tb tomo nota
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #10  
Antiguo 20-04-2017
koalasoft koalasoft is offline
Miembro
 
Registrado: oct 2004
Ubicación: Tenosique Tabasco
Posts: 86
Poder: 20
koalasoft Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
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…
Responder Con Cita
  #11  
Antiguo 20-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Puedes encontrar un ejemplo mas simplificado y en Builder aquí.
Y el mismo ejemplo en delphi, aquí.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar carpeta(s) con ProgressBar doverzhoff Varios 3 28-12-2011 00:46:30
copiar carpeta con sus ficheros chinchan C++ Builder 1 22-11-2008 23:03:29
Copiar ficheros piccolo2101 Varios 1 07-11-2005 12:50:41
Copiar Ficheros IceJamp Varios 3 30-11-2004 14:45:17
Copiar nombres de ficheros a un Combo Tomás Varios 2 12-01-2004 17:28:51


La franja horaria es GMT +2. Ahora son las 17:57:08.


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
Copyright 1996-2007 Club Delphi