Immer wieder wird nach einer Kopierfunktion gefragt, die den Fortschritt anzeigt und einfach zu integrieren ist. Über die API - Dokumentation bin ich zufällig auf die Funktion CopyFileEx gestossen. Diese Funktion bietet genau die gesuchte Funktion: Kopieren einer Datei und Möglichkeit den Kopierfortschritt beliebig anzuzeigen. Hierzu wird ein Modul mit folgendem Code benötigt: Option Explicit ' Benötigte API-Deklarationen und Konstanten 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 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 Public bCancel As Long ' Verweis auf ein ProgressBar-Control Public glbProgBar As ProgressBar Die eigentlich Funktion: ' Datei kopieren mit Fortschrittsanzeige Public Function Fortschrittsanzeige( _ 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 If Not glbProgBar Is Nothing Then With glbProgBar .Value = CStr(Int((TotalBytesTransferred * 10000) / _ (TotalFileSize * 10000) * 100)) End With DoEvents End If Fortschrittsanzeige = PROGRESS_CONTINUE End Function Ein kleines Beispiel: ' Datei kopieren Private Sub cmdCopy_Click() ' ProgressBar-Control Set glbProgBar = ProgressBar1 ProgressBar1.Value = 0 ' Datei kopieren nResult = CopyFileEx(txtSource.Text, _ txtDest.Text, _ AddressOf Fortschrittsanzeige, _ ByVal 0&, _ bCancel, _ COPY_FILE_RESTARTABLE) End Sub Der Aufruf übergibt der API-Funktion die Quell- und Zieldatei. In der Funktion Fortschrittsanzeige aktualisierenwir die Progressbar. Optional wäre es noch möglich den Vorgang abzubrechen, in dem bCancel = True gesetzt wird. Dieser Tipp wurde bereits 49.544 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |