Papasayans
Messages postés4Date d'inscriptionmardi 20 mai 2008StatutMembreDernière intervention13 novembre 2008
-
11 nov. 2008 à 12:11
Papasayans
Messages postés4Date d'inscriptionmardi 20 mai 2008StatutMembreDernière intervention13 novembre 2008
-
13 nov. 2008 à 13:57
Bonjour,
je me tourne vers vous car je début en VB et que je tombe sur un probleme que je ne peut surmonter seul.
(je ne vais surement pas employer les bon termes mais bon je me lance)
j'ai créer un petit programme pour transférer des fichiers d'un CD-rom vers un répertoire du disque dur. Tout fonctionne comme je le veut mais je voudrais intégrer une progress barre lors du transfert des fichiers.
j'ai donc créer une picturebox avec avec un timer pour gérer la barre de progression et maintenant voila la question :
comment intégrer la commande de copie afin que ma progress barre fonction lors du transfert des fichiers.
je vous remerci de vos réponses.
je vous met les lignes de codes que j'ai déja faite.
Merci a tous
Dim niveau As Long, max As Long
Private Sub affiche_Timer()
niveau = niveau + 1 If niveau max Then affiche.Enabled False
Pb.Line (0, 0)-(niveau * Pb.ScaleWidth / max, Pb.ScaleHeight), vbGreen, BF
If niveau = max Then
Transfert.Hide
fin.Show
End If
'Shell "cmd /c md c:\temp", 0
'Shell "cmd /c xcopy \datas\*.* c:\temp /e", 0
End Sub
Private Sub Form_Load()
max = 50
niveau = 0
End Sub
pour le momment ca fonctionne mais sans aucune création de répertoire ni copie de fichier.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 11 nov. 2008 à 13:40
A noter que la ProgressBar existe déjà toute faite dans les controles de VB6, il faut inclures les composants Microsoft Windows Common Controle pour l'avoir dans la barre d'outils.
Ensuite sur le principe, effectivement pour afficher l'avancement de la copie sur la progressbar, tu ne vas pas pouvoir le faire en utilisant xcopy. Il va te falloir copier les fichiers un à un et entre chaque copie incrémenter la progressbar.
Sinon en utilisant xcopy, tu pourras faire une progressbar qui reflete juste un traitement encours mais tu n'auras pas la représentation du taux d'avacement.
C'est tout à fait acceptable aussi, c'est un choix à faire.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 nov. 2008 à 15:35
Comme je te le disais, tu as donc 2 solutions.
Soit tu veux que ta progressbar représente exactement l'avancement de la copie, il te faudra donc pour cela, d'abord connaitre le nombre de fichiers à copier, et ensuite faire une première boucle sur la liste des dossiers et pour chacun des ces dossiers faire une seconde boucle sur les fichiers à copier. Et à chaque copie de fichier, tu incrémente la progressbar. Cela t'oblige effectivement à copier chacun des fichiers, un à un.
Soit il n'est as nécessaire que ta progressbar représente exectement l'avancement. Dans ce cas tu peut effectivement utiliser un timer pour animer ta progressbar. Mais contrairement à ce que tu fais, lorsque ta progressbar arrive au maximum, tu la remet à 0 et tu continue l'incrémentation. Et comme ça indéfiniment.
Il te faudra par contre, à coté une autre fonction, qui va dans l'ordre :
- démarrer le timer de la progressbar
- lancer la copie de l'ensemble des fichiers
- attendre la fin de la copie (attention à la commande Shell qui, utilisée seule n'attend pas la fin de l'execution pour rendre la main)
- arreter le timer de la progressbar et la masquer si besoin.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Papasayans
Messages postés4Date d'inscriptionmardi 20 mai 2008StatutMembreDernière intervention13 novembre 2008 12 nov. 2008 à 22:38
Quel parametre dois je mettre avec shell pour que celui ci attend la fin avant de rendre la main au programme ? car je viens de voir ta seconde réponse mais entre temps j'avais suivi ton conseil et tapez les lignes de codes afin qu'il copie 1 par 1 les fichiers.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 13 nov. 2008 à 08:57
C'est plus complexe que ça, la commande Shell n'est pas prévue pour attendre la fin de l'execution.
Tu peux regarder ma source, j'y ai mis un mécanisme qui attend justement la fin de l'execution. Le problème est que dans ce cas, je suspend le fonctionnement du code durant l'attente, donc dans ce cas ta progressbar ne sera pas mis à jour.
Il me semble qu'il existe une autre solution, mais ça ne me revient pas pour le moment.
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Papasayans
Messages postés4Date d'inscriptionmardi 20 mai 2008StatutMembreDernière intervention13 novembre 2008 13 nov. 2008 à 13:57
Ca ne drevrais pas être un probleme vu que j'incremente ma progress barre d'un a chaque fichier copier. Donc ta source peut mettre utile. Ou puis je la trouver ?
pour infos je vais te recopier ce que j'ai modifier avant d'avoir vu ton message :
Dim niveau As Long, max As Long, ok As Long, ori As String, des As String
Private Sub affiche_Timer()
niveau = niveau + 1
ori = "Copie de "
des = " Vers "
ok = 0
Pb.Line (0, 0)-(niveau * Pb.ScaleWidth / max, Pb.ScaleHeight), vbGreen, BF
If niveau = max Then
Transfert.Hide
fin.Show
End If If niveau 1 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\00000001.TMP" + des + "C:\TEMP"
'Shell "cmd /c md c:\temp", 0
'Shell "cmd /c copy \datas\00000001.tmp c:\temp", 0
ok = 1
End If If niveau 2 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\0x040c.INI" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\0x040c.ini c:\temp", 0
ok = 1
End If If niveau 3 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\CoD4MW.MSI" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\CoD4MW.MSI c:\temp", 0
ok = 1
End If If niveau 4 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\FirewallInstallHelper.DLL" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\FirewallInstallHelper.DLL c:\temp", 0
ok = 1
End If If niveau 5 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\ISSetup.DLL" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\ISSetup.DLL c:\temp", 0
ok = 1
End If If niveau 6 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\PB.CAB" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\PB.CAB c:\temp", 0
ok = 1
End If If niveau 7 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\Setup.INI" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\Setup.INI c:\temp", 0
ok = 1
End If If niveau 8 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\WindowsInstaller-KB893803-x86.EXE" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\WindowsInstaller-KB893803-x86.EXE c:\temp", 0
ok = 1
End If If niveau 9 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\autorun.INF" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\autorun.INF c:\temp", 0
ok = 1
End If If niveau 10 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\instmsia.EXE" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\instmsia.EXE c:\temp", 0
ok = 1
End If If niveau 11 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\instmsiw.EXE" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\instmsiw.EXE c:\temp", 0
ok = 1
End If If niveau 12 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\pbsvc.EXE" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\pbsvc.EXE c:\temp", 0
ok = 1
End If If niveau 13 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\setup.EXE" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\setup.EXE c:\temp", 0
ok = 1
End If If niveau 14 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\splash.BMP" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\splash.BMP c:\temp", 0
ok = 1
End If If niveau 15 And ok 0 Then
Transfert.fichier.Caption = ori + "\DATAS\version.INF" + des + "C:\TEMP"
'Shell "cmd /c copy \datas\version.INF c:\temp", 0
ok = 1
End If If niveau max Then affiche.Enabled False
'Shell "command.com /c xcopy \datas\*.* c:\cod4 /e", 0
End Sub
Private Sub Form_Load()
max = 15
niveau = 0
End Sub
voila les lignes de code comme tu peut le voir y'a pas de probleme si ton astuce m'arrête le programme durant la copie du fichier.