[R] Barre de progression.

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

[R] Barre de progression.

#1

Message par eln »

Bonjour

Je souhaiterai créer une barre de progression pour l'installation de mes logiciels qui se termine à la fin du script avec un avancement déterminé au cours du script.

Merci de votre aide et de vos conseils.
Modifié en dernier par eln le mer. 15 août 2007 09:21, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#2

Message par Tlem »

Voici un exemple de barre de progression pour le téléchargement d'un fichier.
Adapter le à votre besoin :

Code : Tout sélectionner

$FileUrl = "http://www.autoitscript.com/autoit3/files/beta/autoit/autoit-v3.2.5.2-beta-setup.exe"
$FileSize = InetGetSize($FileUrl)
;$FileName = StringSplit($FileUrl, "/")
;$FileName = $FileName[$FileName[0]]
$FileName = StringRegExpReplace($FileUrl, "^.*/", "")

InetGet($FileUrl,@scriptdir & "\" & $FileName, 1, 1)

HotKeySet("{ESC}", "_InetGetAbort")

ProgressOn("Download progress for "&$FileName, "", "0%")
While @InetGetActive
    $Prog = Int((100 * @InetGetBytesRead) / $FileSize)
    ProgressSet($prog, @InetGetBytesRead & "/" & $FileSize & " bytes", "Downloading "&$FileName)
    Sleep(250)
WEnd

Func _InetGetAbort()
    InetGet("abort")
EndFunc ;==> _InetGetAbort()
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#3

Message par Tlem »

J'ai trouvé ca aussi :

Code : Tout sélectionner

;use ProgressCopy(Source,Destination, 1 to use multi colour ,"Attributes", 1 for Overwrite files)
#include <GUIConstants.au3>
ProgressCopy("C:\Rep1", "D:\Rep2\",1)

Func ProgressCopy($current, $destination, $UseMultiColour=0, $attrib = "-R", $overwrite = 1 ,$Run1 = 0 )

;FirstTimeRun Get original DirSize and set up Gui
If $Run1 = 0 Then
Global $OverallQty, $Overall, $source, $overallpercent, $Progress0Text, $progressbar1, $Progress1Text, $progressbar2, $Progress2Text, $LocalPercent
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
If not FileExists ($Destination) then DirCreate ($Destination); This is why it was failing, the dir did not exist
$source = $current
If StringRight($current, 1) = '\' Then $current = StringTrimRight($current, 1)
If StringRight($destination, 1) <> '\' Then $destination = $destination & "\"
$tosearch = $current
$Overall = DirGetSize($tosearch, 1)
$OverallQty = $Overall[1]
Global Const $PrCopyGui = GUICreate("Copie des Fichiers", 420, 100, -1, -1, -1, $WS_EX_TOOLWINDOW + $WS_EX_TOPMOST)
$Progress0Text = GUICtrlCreateLabel("Veuillez patienter", 10, 5, 400, 20, $SS_LEFTNOWORDWRAP)
$progressbar1 = GUICtrlCreateProgress(10, 20, 400, 20)
GUICtrlSetColor(-1, 32250)
$Progress1Text = GUICtrlCreateLabel("", 10, 44, 400, 20, $SS_LEFTNOWORDWRAP)
$progressbar2 = GUICtrlCreateProgress(10, 60, 400, 20, $PBS_SMOOTH)
$Progress2Text = GUICtrlCreateLabel("", 10, 82, 400, 20, $SS_LEFTNOWORDWRAP)
GUISetFont(10, 600)
;$Progress2Text2 = GUICtrlCreateLabel("", 150, 62, 400, 20)
GUICtrlSetColor(-1, 32250); not working with Windows XP Style if not using windows classic style or dllcall above
GUISetState(@SW_SHOW)
GUICtrlSetData($Progress1Text, "Répertoire de travail " & $tosearch)
$Run1 = 1
EndIf

$Size = DirGetSize($current, 3)
$Qty = $Size[1]
Local $search = FileFindFirstFile($current & "\*.*")
While 1
Dim $file = FileFindNextFile($search)
If @error Or StringLen($file) < 1 Then ExitLoop
If Not StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
$Qty -= 1
$LocalPercent = 100 - (($Qty / $Size[1]) * 100)
$OverallQty -= 1
$overallpercent = 100 - (($OverallQty / $Overall[1]) * 100)
GUICtrlSetData($Progress0Text, "Progression Totale " & Int($overallpercent) & "% Completer")
GUICtrlSetData($progressbar1, $overallpercent)
GUICtrlSetData($progressbar2, $LocalPercent)
GUICtrlSetData($Progress2Text, "Copie du Fichier " & $file)

If $useMultiColour then
GUICtrlSetColor($Progressbar2, _ChangeColour($LocalPercent))
GUICtrlSetColor($Progressbar1, _ChangeColour($OverallPercent))
EndIf

FileCopy($current & "\" & $file, $destination & StringTrimLeft($current, StringLen($source)) & "\" & $file,$overwrite)
FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
EndIf
If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
DirCreate($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file)
FileSetAttrib($destination & StringTrimLeft($current, StringLen($source)) & "\" & $file, $attrib)
GUICtrlSetData($Progress1Text, $current & "\" & $file)
ProgressCopy($current & "\" & $file, $destination, $UseMultiColour, $attrib, $overwrite,1)
EndIf
WEnd
FileClose($search)
;when overall percent = 100 set end gui text, delete gui and reset run1 to 0
If $overallpercent = 100 Then
GUICtrlSetData($Progress0Text, "Progression Totale complètée à 100%")
GUICtrlSetData($progressbar1, 100)
GUICtrlSetData($progressbar2, 100)
GUICtrlSetData($Progress2Text, "Terminer !")
Sleep(2000)
GUIDelete($PRCopyGui)
$Run1 = 0
EndIf
EndFunc ;==>ProgressCopy

Func _ChangeColour($start)

$Redness = Int(255 - ($start / 100 * 512))
If $Redness < 0 Then $Redness = 0

$Greeness = Int(($start / 100 * 512) - 257)
If $Greeness < 0 Then $Greeness = 0

$Blueness = Int(255 - ($Redness + $Greeness))

Return ($Redness * 256 * 256) + ($Greeness * 256) + $Blueness

EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

#4

Message par eln »

Bonjour

Merci pour ces indices. Le premier j'ai à peu près compris mais le deuxième est trop compliqué pour moi. J'ai changé un peu d'optique et souhaiterai une barre de défilement qui s'arrêterai à la fin de l'installation.

Je suis parti sur la dessus :

Code : Tout sélectionner

$s = 0
$w = 0

While 1
ProgressOn("Veuillez patienter", "Installation en cours", "")
For $i = $s to 100 step 1
    sleep(20)
    ProgressSet($i)
Next
    If $i = 100 then
        $s = 0
    EndIf
    If $w = 1 Then
        ProgressOff()
    EndIf
WEnd

run ("notepad.exe")

Sleep (50000)

$w = 1
J'ai ma barre de défilement mais comme je ne sors pas de ma boucle !!
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#5

Message par Tlem »

A quoi ressemble votre script d'installation !

Pouvez vous nous en mettre un bout ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

#6

Message par eln »

Il n'y a pas de script en particulier. Je souhaiterai juste une barre de défilement pendant l'installation du logiciel. C'est du gadget et c'est pour occuper les yeux. Elle commence au début et s'arrête à la fin.

Sinon compiler un script "Barre de défilement" en executable. Le lancer au début et le tuer à la fin. Mais il y a peut-être une autre solution ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#7

Message par Tlem »

eln a écrit :Je souhaiterai juste une barre de défilement pendant l'installation du logiciel. C'est du gadget et c'est pour occuper les yeux. Elle commence au début et s'arrête à la fin.
Normalement, c'est l'installateur du logiciel, qui doit gérer cela, et non vous !
D'ailleurs, sur quoi voulez-vous vous baser pour le temps d'installation, une simple temporisation n'est pas suffisante, car d'une machine à l'autre ca ne mettra pas la même durée !!!
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

#8

Message par eln »

Normalement, c'est l'installateur du logiciel, qui doit gérer cela, et non vous !
Oui je sais mais comme je disais avant, c'est du gadget. C'est juste pour occuper les yeux et m'entrainer. J'ai fait un script entre autre pour l'installation d'office 2003 par le CD. C'est assez long et il n'y a pas de barre d'avancement tout le temps.

Maintenant je n'ai pas besoin de temporisation, je voudrai juste qu'une fois l'installation terminée ma barre de progression disparaisse avec pourquoi pas un message comme quoi l'installation est terminée et donc que tout c'est bien passé. Ce serait une barre de progression en continu qui tourne en boucle.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#9

Message par Tlem »

Voici un autre exemple tirer du forum Anglais, adapter à votre besoin (Remplacer MsPaint.exe par votre installation de prog) :

Code : Tout sélectionner

#include <GUIConstants.au3>
HotKeySet("{ESC}", "endscript")

; On récupère le PID du programme.
$PID = Run("MsPaint.exe","")

$Ca = GUICreate ( "" , 250 , 46 , -1 , -1 , $WS_POPUP,$WS_EX_TOPMOST+$WS_EX_WINDOWEDGE+$WS_EX_DLGMODALFRAME)
GUISetBkColor ( 0x000000 , $Ca )
$Da = GUICtrlCreateLabel ("    Installation en cours ...",  23, -1, 250,23)
GuiCtrlCreateGraphic(-1, 1, 252,45,$SS_SUNKEN)
GUICtrlSetColor(-1, 0XFFFFFF)
GUICtrlSetColor ( $Da, 0XFFFFFF)
GUICtrlSetFont ($Da, "12" , "50" , "" , "Courrier New")
GUICtrlCreateGraphic(1, 23, 250,20)
GUICtrlSetColor(-1, 0x007F00)
GuiSetState(@SW_SHOW)
_SliderRight()

Func _getmsg()
        $Msg = GUIGetMsg()
    If $Msg = $GUI_EVENT_CLOSE Then Exit
   
    ; Test du process. Si inexistant, on sort.
    If ProcessExists($PID)=0 Then endscript()
    
EndFunc

Func _SliderRight()
        Local $newcolor,$color = 0x050000
    For $m = 0 To 245 Step 5
        $newcolor += $color 
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $newcolor)
        Sleep(50)
    Next
    _getmsg()
    _SliderLeft()
EndFunc

Func _SliderLeft()
    Local $backcolor,$color = 0x050000
    For $m = 245 To 0 Step -5
        $backcolor += $color   
        $ba = GUICtrlCreateLabel( "", $m, 25, 4,16)
        GUICtrlSetBkColor($ba, $backcolor)
        Sleep(50)
    Next
    _getmsg()
    _SliderRight()
EndFunc

Func endscript()
    Exit
EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
eln
Niveau 6
Niveau 6
Messages : 202
Enregistré le : sam. 28 juil. 2007 12:54
Status : Hors ligne

#10

Message par eln »

Merci pour cette recherche et solution. Sujet résolu.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

#11

Message par Tlem »

eln a écrit :Merci pour cette recherche et solution. Sujet résolu.
Dans ce cas rajouter le tag [R] dans le titre de votre 1er message .
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ELGAMALI
Niveau 5
Niveau 5
Messages : 184
Enregistré le : mar. 13 sept. 2011 00:06
Status : Hors ligne

Re: [R] Barre de progression.

#12

Message par ELGAMALI »

Bonsoir Tlem
Les scripts que vous proposez exemple:
► Afficher le texte
ne marche pas ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Barre de progression.

#13

Message par Tlem »

Bonsoir,
Pour commencer, je répondrais à votre dernière phrase en vous dirigeant simplement vers la deuxième ligne de ma signature !!!

Ensuite, regardez la date à laquelle ces scripts ont été proposés. :shock:
Vous imaginez bien que cinq ans en arrière, la version d'AutoIt n'était pas celle d'aujourd'hui. Donc pour un script de cette époque qui ne fonctionne pas aujourd'hui, vous devez bien évidement l'adapter en conséquence.

Pour finir, je rajouterais que vous oubliez un peu trop souvant d'utiliser les balises de code (ce qui est déplaisant, car je doit les rajouter à chaque fois).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ELGAMALI
Niveau 5
Niveau 5
Messages : 184
Enregistré le : mar. 13 sept. 2011 00:06
Status : Hors ligne

Re: [R] Barre de progression.

#14

Message par ELGAMALI »

Bonjour

Alors c’est la raison pour la quelle la plus part des scripts ne marchent pas !! Merci pour cette information! Que dieu te garde…
______________________________________________________________________________
Quelle est la différence entre un(e) copain(ine), une ami(e) et une très bonne ami(e) ... ???
Répondre