Page 1 sur 1
[R] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 05:22
par Anthony
Bonjour à tous,
Je souhaiterai réaliser un processus avec contrôle (Bouton "Démarrer") et visuel de progression via (StatusBar)
En gros dès que l'on clique sur "Démarrer" ce même bouton devient "Arrêter" et visualise la progression via la StatusBar.
Le hic c'est que le bouton "Démarrer" ne démarre pas et dès que l'on redimentionne la GUI çà se barre dans tous les sens.
Comment faire pour y remédier.
Lien =>
http://ul.to/9q64ckdd
Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 11:40
par sylvanie
Bonjour,
voici un début de réponse, car d'autres problèmes persistent ...
Ce que je propose, va gérer le statut en cours (cas du bouton en mode démarrer ou arrêter, ce qui n'est pas fait jusqu'à présent, ou du moins pas totalement), ensuite l'update de la progress bar, je l'isole dans une fonction à part pour la stimulée via adlibregister pour simuler.
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>
; Set right edges of status parts
Local $aParts[4] = [200, 310, 400, -1]
; Create GUI
$hGUI = GUICreate("StatusBar Resizable GUI - "&@OSTYPE, 640, 450, 350, 200, $WS_SIZEBOX)
$mylist = GUICtrlCreateList('Pour lancer la conversion, cliquez sur "Démarrer"', 0, 0, 640, 400)
; Create statusbar
$hStatus = _GUICtrlStatusBar_Create($hGUI)
_GUICtrlStatusBar_SetMinHeight($hStatus, 20)
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
GUISetState()
GUIRegisterMsg($WM_SIZING, "WM_SIZING")
;~ #forceref $hWnd, $iMsg, $wParam, $lParam
; Set text in first 2 parts
_GUICtrlStatusBar_SetText($hStatus, "Extraction en cours")
_GUICtrlStatusBar_SetText($hStatus, "Progression", 1)
; Embed a progress bar in third part
$hProgress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
$hProgress_Handle = GUICtrlGetHandle($hProgress)
_GUICtrlStatusBar_EmbedControl($hStatus, 3, $hProgress_Handle)
; Création du bouton "Démarrer"
$input = GUICtrlCreateButton("Démarrer", 0, 2)
$hInput = GUICtrlGetHandle($input)
_GUICtrlStatusBar_EmbedControl ($hStatus, 2, $hInput)
$iProg_Set=0
; Loop until user exits
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $input
update_state()
EndSwitch
WEnd
Func update_bar()
$iProg_Set = $iProg_Set + 10
GUICtrlSetData($hProgress, $iProg_Set)
_GUICtrlStatusBar_SetText ($hStatus, "Progression "&$iProg_Set&" %", 1)
If $iProg_Set>=100 Then
$iProg_Set=0
update_state()
EndIf
EndFunc
Func update_state()
Local $start=1,$stop=0
Static $current_state=$start
If $current_state=$start Then
$current_state=$stop
GUICtrlSetData($input, "Arrêter")
AdlibRegister("update_bar",1000)
Else
$current_state=$start
GUICtrlSetData($input, "Démarrer")
AdlibUnRegister("update_bar")
EndIf
Sleep(50)
EndFunc
Func WM_SIZING()
_GUICtrlStatusBar_Resize ($hStatus)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZING
Par contre, le problème du resize reste entier, car la repainte de la fenêtre n'est pas au point.
Bon courage pour la suite.
Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 12:53
par Anthony
Merci Sylvanie,
J'ai éssayé votre code mais l'action du bouton "Démarrer" n'à aucun éffet sous Windows 7 x64.
J'ai ajouté 2 à 3 choses donc "ProgressBar" et "Démarrer" reprenent leur place mais uniquement quand on relâche la souris, mais çà part toujours dans tous les sens quand on redimendionne la GUI bouton de souris enfoncé.
J'ai trouvé ce code ici:
http://www.autoitscript.com/forum/topic ... appearing/
Une idée une astuce
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>
; Set right edges of status parts
Local $aParts[4] = [200, 310, 400, -1]
Global $fSize = False
; Create GUI
$hGUI = GUICreate("StatusBar Resizable GUI - "&@OSTYPE, 640, 450, 350, 200, $WS_SIZEBOX)
$mylist = GUICtrlCreateList('Pour lancer la conversion, cliquez sur "Démarrer"', 0, 0, 640, 400)
; Create statusbar
$hStatus = _GUICtrlStatusBar_Create($hGUI)
_GUICtrlStatusBar_SetMinHeight($hStatus, 20)
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
GUISetState()
GUIRegisterMsg($WM_SIZING, "WM_SIZING")
;~ #forceref $hWnd, $iMsg, $wParam, $lParam
; Set text in first 2 parts
_GUICtrlStatusBar_SetText($hStatus, "Extraction en cours")
_GUICtrlStatusBar_SetText($hStatus, "Progression", 1)
; Embed a progress bar in third part
$hProgress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
$hProgress_Handle = GUICtrlGetHandle($hProgress)
_GUICtrlStatusBar_EmbedControl($hStatus, 3, $hProgress_Handle)
; Création du bouton "Démarrer"
$input = GUICtrlCreateButton("Démarrer", 0, 2)
$hInput = GUICtrlGetHandle($input)
_GUICtrlStatusBar_EmbedControl ($hStatus, 2, $hInput)
$iProg_Set=0
; Loop until user exits
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case Else
If $fSize Then
$fSize = False
_GUICtrlStatusBar_EmbedControl ($hStatus, 2, $hInput)
_GUICtrlStatusBar_EmbedControl($hStatus, 3, $hProgress_Handle)
EndIf
Case $input
update_state()
EndSwitch
WEnd
Func update_bar()
$iProg_Set = $iProg_Set + 10
GUICtrlSetData($hProgress, $iProg_Set)
_GUICtrlStatusBar_SetText ($hStatus, "Progression "&$iProg_Set&" %", 1)
If $iProg_Set>=100 Then
$iProg_Set=0
update_state()
EndIf
EndFunc
Func update_state()
Local $start=1,$stop=0
Static $current_state=$start
If $current_state=$start Then
$current_state=$stop
GUICtrlSetData($input, "Arrêter")
AdlibRegister("update_bar",1000)
Else
$current_state=$start
GUICtrlSetData($input, "Démarrer")
AdlibUnRegister("update_bar")
EndIf
Sleep(50)
EndFunc
Func WM_SIZING()
$fSize = True
_GUICtrlStatusBar_Resize ($hStatus)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZING
Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 14:15
par mikell
Il serait *infiniment* plus simple de faire une pseudo-statusbar : un espace libre de ~20 px sous la Listbox avec des controles standard dedans, tout ça serait *beaucoup* plus facile à gérer que cette usine à gaz en cours de construction

Commandes normales, positionnement avec GUICtrlSetResizing , etc ...

Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 14:47
par Anthony
Que veux-tu dire par pseudo-statusbar.
Aurais-tu un début de code

Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 15:08
par mikell
Evidemment ake sinon je t'en aurais pas causé
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <SendMessage.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("StatusBar", 640, 460, 350, 200, $WS_SIZEBOX)
$status = _GUICtrlStatusBar_Create($hGUI)
GUICtrlSetState($status, $GUI_DISABLE)
$mylist = GUICtrlCreateList('Pour lancer la conversion, cliquez sur "Démarrer"', 0, 0, 640, 415)
GUICtrlSetResizing($mylist, $GUI_DOCKBORDERS)
GUISetState()
$lab1 = GUICtrlCreateLabel(" Extraction en cours", 0, 414, 120, 25)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$lab2 = GUICtrlCreateLabel("Progression", 200, 414, 100, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$prog = GUICtrlCreateLabel(" ", 300, 414, 40, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$progress = GUICtrlCreateProgress(450, 414, 150, 15, $PBS_SMOOTH)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
$start = GUICtrlCreateButton("Démarrer", 350, 414, 80, 16)
GUICtrlSetState(-1, $GUI_ONTOP)
GUICtrlSetResizing(-1, $GUI_DOCKSTATEBAR)
GUISetState()
GUIRegisterMsg($WM_SIZING, "WM_SIZING")
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $start
GUICtrlSetData($start, "Arrêter")
; etc
EndSwitch
WEnd
Func WM_SIZING()
_GUICtrlStatusBar_Resize ($status)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZING
Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 15:20
par Anthony
Jeez,,,,,,,,,,,,, et merci... Tout çà en si peu de temps
Bon je met le chrono on vera combien de (temps) je met pour arriver à quelque chose

Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 20:58
par Anthony
Bon voilà j'ai réussi, il suffit de cliquer sur "Démarrer" jusqu'à 100% (pour cette démo) mais c'est une usine à gaz
Par contre si c'était possible et aussi propre et fluide avec ta méthode je suis preneur pour passer cette rubrique en [R]
Voici le lien =>
http://ul.to/9gi4ved8
Re: [..] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 22:36
par mikell
J'y arrive, mais c'est moins académique (et moins propre) ...
Bravo pour ton effort, tu peux mettre le [R] sans hésiter

Re: [R] Création d'une GUI de Progression redimentionnable
Posté : mar. 07 août 2012 22:38
par Anthony
Voilà c'est fait
Merci pour tout
