mardi 30 décembre 2014

Barre de progression

Je vais vous présenter ici un exemple de barre de progression basé sur l'objet "Forms.ProgressBar". La barre de progression prend une valeur allant de 0 (vide) à 100 (plein). Bien entendu, par défaut cette valeur est à 0. La barre de progression augmente d'une valeur définit dans la propriété ".Step" en appelant la méthode ".PerformStep()". Par exemple, si la propriété ".Step" est définit à 25, il faudra appeler 4 fois la méthode ".PerformStep()" pour remplir la barre de progression.

Exemple


 
#Assembly.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

#Ouvre une nouvelle fenêtre.
$formA = New-Object Windows.Forms.Form
$formA.FormBorderStyle = "FixedDialog"
$formA.text = "ProgressBar"
$formA.Size = New-Object Drawing.Point 300,100

#Création d'un label (Label).
$labelA1 = New-Object Windows.Forms.Label
$labelA1.Location = New-Object Drawing.Point 20,12
$labelA1.Size = New-Object System.Drawing.Size(250,16)
$labelA1.text = "Traitement en cours ..."

#Barre de progression (Progress bar).
$progressA1 = new-object System.Windows.Forms.ProgressBar
$progressA1.Location = new-object System.Drawing.Point 20,32
$progressA1.Size = new-object System.Drawing.Size(250,23)
$progressA1.Step = 1

#Timer.
#Le timer va me permettre de lancer automatiquement le traitement
#1 seconde après l'ouverture de la fenêtre.
$timer1 = new-object System.Windows.forms.timer
$timer1.Interval = 1000   #Initialement je lance le timer au bout d'une seconde.
$timer1.Enabled  = $true
$timer1.add_Tick({
                   #Initialisation.
                   #Pour éviter de lancer 2 fois le traitement je change
                   # l'intervalle d'exécution du timer.
                   $timer1.Interval = 999999

                   #Boucle de traitement.
                   for ($i=0;$i -le 100;$i++)
                    {
                      #Force l'exécution des events de la fenêtre.
                      [System.Windows.Forms.Application]::DoEvents()

                      #Mise à jour de la bar de progression.
                      $progressA1.PerformStep()

                      #Traitement de votre choix.
                      Sleep -Milliseconds 50
                    }

                   #Arrête le timer et ferme la fenêtre.
                   $timer1.Stop()
                   $formA.Close()
                })

#Attache les contrôles à la fenêtre.
$formA.controls.add($labelA1)
$formA.controls.add($progressA1)

#Lance le timer.
$timer1.Start()

#Affiche fenêtre.
$formA.ShowDialog()

#Fin.