Effectivement... avec le précédent code, c'était très difficile (vu que tous les labels étaient dans un *.ini non inclus)
En faisant un test rapide avec
opt("TrayIconDebug",1)
J'ai pu voir que lorsque la deuxième fenêtre apparaît, le script reste bloqué à la ligne 261 ou 311 selon le bouton pressé ...
Autrement dit, les boucles Do... Until que tu as construites.
Je regarderais de ce côté là ...
****
Après quelques minutes, voilà une modification qui ne résoud pas le problème mais qui augmente l'efficacité de ton script
Code : Tout sélectionner
While $temp_affichage_install_box > "0"
Sleep ( 100 )
$temp_affichage_install_box = 15 - Round(TimerDiff($startboxinstalltimer)/1000,0)
GUICtrlSetData ( $messageboxinstall_delay_updt, $delai_lance_box &" "& $temp_affichage_install_box &" "& $SecondsTxt )
WEnd
au lieu de ce que tu avais au départ
Code : Tout sélectionner
Do
Sleep ( 100 )
If TimerDiff ($startboxretardtimer) >= "1000" Then
$temp_affichage_retard_box = ($temp_affichage_retard_box - "1" )
$startboxretardtimer = TimerInit()
GUICtrlSetData ( $messageboxretard_delay_updt, $delai_retard_box &" "& $temp_affichage_retard_box &" "& $SecondsTxt )
EndIf
La différence entre ma boucle et la tienne, outre le fait que je suis inconfortable avec les Do... Until, est
que je ne réinitialise pas le Timer à chaque 100 ms ... TimerDiff sert exactement à compter le temps depuis
le début d'un timerinit ... Donc, au lieu de faire 15 timerinit, j'en fais seulement un et utilise TimerDiff pour vérifier...
Je crois que c'est plus "optimisé" comme ça ... m'enfin bon, je replonge sur le pourquoi du comment ...
...
Presque 1 heure plus tard, j'ai une solution
► Afficher le texte
Code : Tout sélectionner
; ************ Constants and declaration ************
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
#include <DateTimeConstants.au3>
#include <File.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Global $gui2
;Opt ( "TrayIconHide", 1 )
Opt("GUIOnEventMode", 1)
Opt("GUICoordMode", 1)
opt("TrayIconDebug",1)
$gui1 = GUICreate("Gui1",400,400,-1,-1)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE,"quitter")
$bouton = GUICtrlCreateButton("Bouton",50,50,50,50)
GUICtrlSetOnEvent(-1,"gui2")
Global $timer = 15
Global $_timer, $_tps
While 1
Sleep(100)
WEnd
Func gui2()
$gui2 = GUICreate("gui2",200,200,-1,-1)
GUISetOnEvent($GUI_EVENT_CLOSE,"closechild")
Global $exe = GUICtrlCreateButton("Executer",10,10,100,40)
Global $_tps = GUICtrlCreateLabel("",10,100,100,40)
GUISetState(@SW_SHOW)
GUISetState(@SW_HIDE,$gui1)
$_timer = TimerInit()
AdlibEnable("timer",10)
EndFunc
Func timer()
AdlibDisable()
While $timer > 0
$diff = TimerDiff($_timer)/1000
$timer = 15 - Round($diff,0)
GUICtrlSetData($_tps,$timer)
Sleep(300)
WEnd
closechild()
EndFunc
Func closechild()
GUIDelete($gui2)
Sleep(200)
GUISetState(@SW_SHOW,$gui1)
EndFunc
Func quitter()
Exit
EndFunc
Le script ci-dessus est un exemple de comment procéder.
Même avec le plus petit script, j'ai eu le même problème que toi, c'est-à-dire que la seconde gui ne répondait pas correctement.
Cependant, si on enlève le timer, tout fonctionne correctement, voilà pourquoi j'ai mis le compteur (timer) en adlibenable pour pallier à ce problème.
Pour que ça fonctionne correctement, les variables utilisées par le compteur doivent être déclarées auparavant.
Si jamais il y'a un soucis, n'hésite pas ! ... cela corrige entièrement le problème.
P.s. : Je crois remarquer aussi que tu utilise guicreate pour créer la seconde gui à chaque fois que celle-ci a besoin d'être crée
tu devrais utiliser guidelete plutôt que @SW_HIDE selon moi puisque cette gui est recrée à neuf chaque fois.