Re: Trabajar con el ProgressBar Crea un módulo bas con el siguiente código:
Option Explicit
'Constantes para el Api CopyFileEx
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2
'Declaración Api CopyFileEx para copiar archivos con progreso
Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal lpProgressRoutine As Long, _
lpData As Any, _
ByRef pbCancel As Long, _
ByVal dwCopyFlags As Long) As Long
' Flag para cancelar la copiar ( 0 copia, 1 cancela )
Public Cancelar As Long
'función para copiar
Public Function CopiarArchivo(ByVal TotalFileSize As Currency, ByVal _
TotalBytesTransferred As Currency, _
ByVal StreamSize As Currency, _
ByVal StreamBytesTransferred As Currency, _
ByVal dwStreamNumber As Long, _
ByVal dwCallbackReason As Long, _
ByVal hSourceFile As Long, _
ByVal hDestinationFile As Long, _
ByVal lpData As Long) As Long
'mostramos el progreso en el label
Form1.ProgressBar1.Value = CStr(Int((TotalBytesTransferred * 10000) / _
(TotalFileSize * 10000) * 100))
DoEvents
'continuamos la copia del fichero
CopiarArchivo = PROGRESS_CONTINUE
End Function Y en el botón el siguiente código:
Option Explicit
Private Sub Command1_Click()
Dim Ret As Long
Cancelar = 0
'text1 es donde va la ruta de el archivo a copiar y text2 es el destino
Label1.Caption = "Comenzando a copiar: " & Text1 & " en: " & Text2
'Se llama al api y comienza la copia del archivo, _
pasandole las rutas y _la dirección de la función
Ret = CopyFileEx(Trim$(Text1), Trim$(Text2), AddressOf CopiarArchivo, _
ByVal 0&, Cancelar, COPY_FILE_RESTARTABLE)
'Moastramos el resultado
Label1.Caption = "Estado de la copia: " + IIf(Ret = 0, _
"(Error/Abortado)", _
"Copia completa")
End Sub |