La Web del Programador: Comunidad de Programadores
 
    Pregunta:  4843 - PROGRESSBAR EN VB
Autor:  David Brunetto
Yo doy la orden de copiar un archivo utilizando un objeto systemObjects. Si yo quiero mostrarle al usuario el progreso de la copia con una barra de progreso, ¿Cómo hago para que los dos procesos se sucedan en forma simultánea? Es decir si yo primero le digo a la barra de progreso que se recorra de principio a fin, la copia del archivo no comienza hasta que la barra haya terminado su tarea, y si a la inversa doy la orden de copia primero, la barra de progreso no comienza hasta que la copia haya concluído.
Se me ocurre que debe haber una forma de que el procesador dedique fracciones de tiempo en forma alternada entre las dos tareas. ¿Cómo se hace?
Desde ya muy agradecido a todos.

  Respuesta:  juan cecconi
Buenas , aqui te mando una respuesta que probablemente sea algo compleja pues esta en "C" (si sabes algo de "c" te será facil), pero no te preocupes que en la ayuda si buscas esta funcion API hay bastante informacion para usarla en VB. Hacerlo de otra forma seria muy complejo pues esta API ya hace todo, y el realizarlo manualmente requeriria objetos de sincronizacion que son mas dificiles de manejar!!!
Aqui va el codigo:

#include <Shellapi.h>

void CopiarFiles()
{
SHFILEOPSTRUCT FileOp;
char Src[255];
char Dst[255];
char Titulo[] = "Copiador Juanito";
int i;

strcpy(Src,"C:\\Tmp\\Prueba.txt"); //Doble Barra pues en C la "\" es especial!!!

i = strlen(Src);
Src[i+1] = NULL ;//Agrego un 2do NULL!!!
//
strcpy(Dst,"A:\\Prueba.txt"); // Copio al A: para que sea mas lento y se vea la barra de progreso!!!
i = strlen(Dst);
Dst[i+1] = NULL ;//Agrego un 2do NULL!!!

FileOp.hwnd =hWnd; // en vb seria Form.hwnd !!!
FileOp.pFrom = Src;
FileOp.pTo = Dst;
FileOp.wFunc = FO_COPY;
FileOp.fFlags = 0 ;// FOF_RENAMEONCOLLISION + FOF_SIMPLEPROGRESS ;
FileOp.hNameMappings = NULL;
FileOp.lpszProgressTitle = Titulo;
i = SHFileOperation(&FileOp);
if (FileOp.fAnyOperationsAborted != false)
MessageBox (NULL,"Ha decidido abortar la copia !!!","Copiador Juanito",MB_ICONEXCLAMATION + MB_OK);
}


cualquier consulta enviame un mail !

  Respuesta:  Daniel Figueroa Aguirre
Prueba utilizando DoEvents, debes colocarlo entre las ordenes.

  Respuesta:  el raul yo soy
tu problema es sencillo, debes tener cierta variable para que sea tu fraccionadora, realiza una funcion donde le mandes esta variable, cada que entres incrementala, haciendo que tu barra tome este valor.