Page 1 sur 1
[R] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 09:37
par Ks10
Bonjour à tous,
Je travaille actuellement sur une petite barre de défilement. Pour la réalisation de celui-ci aucun problème.
Parcontre il fige mon programme et je ne peut rien faire d'autre quand la barre de défilement est actif.
Voici le code :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Label1 = GUICtrlCreateLabel("Mot1 - Mot2 - Mot3", 8, 16, 223, 17)
Global $Button1 = GUICtrlCreateButton("START", 256, 136, 107, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i = 8 To 700
Sleep(30)
ControlMove($Form1, "Mot1 - Mot2 - Mot3", $Label1, $i, 16)
If $i = 700 Then
$i = -223
EndIf
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Label1
$test = GUICtrlRead($Label1)
$Array = StringSplit($test, "-")
MsgBox(64, "Infos", "Test : " & $Array[3])
Case $Button1
Exit
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Je pense que le soucis vien des deux boucles mais comment faire autrement ?
Pouvez-vous m'expliquer mon erreur ? Il y a quelques choses que j'ai rater ?
Autre point que j'aimerais comprendre ?
Actuellement pour faire disparaitre la barre et la faire réapparaitre j'utilise les bords de la fenêtre. Mais il y a t'il un moyen pour le faire sans utiliser les bords ?
Merci d'avance
EDIT :
J'ai trouver une alternative mais est ce que c'est la meilleur façon ?
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Label1 = GUICtrlCreateLabel("Mot1 - Mot2 - Mot3", 8, 16, 223, 17)
Global $Button1 = GUICtrlCreateButton("START", 256, 136, 107, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$i = 8
Do
$i = $i + 1
Sleep(30)
ControlMove($Form1, "Mot1 - Mot2 - Mot3", $Label1, $i, 16)
If $i = 700 Then
$i = -223
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Label1
$test = GUICtrlRead($Label1)
$Array = StringSplit($test, "-")
ShellExecute($Array[3])
;MsgBox(64, "Infos", "Test : " & $Array[3])
Case $Button1
Exit
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Until $i = 700
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 10:08
par Tlem
La gestion de votre barre de progression par la fonction
AdlibRegister()[\b] devrait résoudre certains problèmes. 
Envoyé depuis mon mobile en utilisant Tapatalk.
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 10:29
par Ks10
Je ne souhaite pas faire une barre de progression
Je souhaite réellement faire une barre de défilement qui délife non stop avec une phrase à l'intérieur.
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 14:24
par TommyDDR
Prenez le post de Tlem, remplacez "progression" par "défilement" et vous aurez votre réponse.
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 14:37
par Ks10
Ah excusez moi je n'avait pas bien compris.
J'ai essayer avec AdLibRegister mais le défilement est trop lent.
J'ai tenter de jouer sur le sleep, cela n'a aucun effet.
Parcontre voici ma solution final et cela m'a permis de comprendre mon erreur :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Label1 = GUICtrlCreateLabel("Mot1 - Mot2 - Mot3", 8, 16, 223, 17)
Global $Button1 = GUICtrlCreateButton("START", 256, 136, 107, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$i = 8
While 1
$i = $i + 1
Sleep(100)
ControlMove($Form1, "Mot1 - Mot2 - Mot3", $Label1, $i, 16)
If $i = 700 Then
$i = -223
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Label1
$test = GUICtrlRead($Label1)
$Array = StringSplit($test, "-")
ShellExecute(StringTrimLeft($Array[3], 1))
Case $Button1
Exit
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
L'utilisation de deux boucle fait planter le programme donc j'ai incorporer le défilement dans la boucle While et j'ai incrémenté la valeur.
Ensuite il me reste une dernière question où je sèche :
Actuellement pour faire disparaitre la barre et la faire réapparaitre j'utilise les bords de la fenêtre. Mais il y a t'il un moyen pour le faire sans utiliser les bords ?
Une idée ?
Merci d'avance
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 15:48
par TommyDDR
Ks10 a écrit :J'ai essayer avec AdLibRegister mais le défilement est trop lent.
Avez vous utilisé le 2nd paramètre de la fonction "AdLibRegister" ?
Avez vous tout simplement ouvert l'aide pour cette fonction ?
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 16:17
par Ks10
Les deux

En laissant par default c'est 250Ms , j'ai changer et j'ai mit 500 et 1000Ms mais résultat inchangé.
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 16:47
par TommyDDR
Ce paramètre correspond à l'interval de temps entre 2 appels, il faut donc diminuer ce temps pour appeler plus souvent votre méthode..
Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 18:37
par Ks10
Ah d'accord autant pour moi ... Désolé j'avait mal interpréter la commande.
Mon deuxième soucis est toujours d'actualité si vous avez une réponse

Re: [..] Barre de défilement fige le programme
Posté : jeu. 18 sept. 2014 19:22
par orax
Il y a aussi GUIOnEventMode pour éviter qu'une boucle bloque la GUI.
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, '_eventClose')
Global $Label1 = GUICtrlCreateLabel("Mot1 - Mot2 - Mot3", 8, 16, 223, 17)
GUICtrlSetOnEvent($Label1, '_eventLabel1')
Global $Button1 = GUICtrlCreateButton("START", 256, 136, 107, 25)
GUICtrlSetOnEvent($Button1, '_eventButton1')
Global $Button2 = GUICtrlCreateButton("Cacher texte", 256, 106, 107, 25)
GUICtrlSetOnEvent($Button2, '_eventButton2')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$i = 8
While 1
$i = $i + 1
Sleep(10)
ControlMove($Form1, "Mot1 - Mot2 - Mot3", $Label1, $i, 16)
If $i = 700 Then
$i = -223
EndIf
WEnd
Func _eventLabel1()
$test = GUICtrlRead($Label1)
$Array = StringSplit($test, "-")
ShellExecute(StringTrimLeft($Array[3], 1))
EndFunc ;==>_eventLabel1
Func _eventButton1()
Exit
EndFunc ;==>_eventButton1
Func _eventButton2()
GUICtrlSetState($Label1, $GUI_HIDE)
Sleep(2000)
GUICtrlSetState($Label1, $GUI_SHOW)
EndFunc ;==>_eventButton1
Func _eventClose()
Exit
EndFunc ;==>_eventClose
Re: [..] Barre de défilement fige le programme
Posté : ven. 19 sept. 2014 18:57
par blacksoul305
Bonjour,
je me permet de poster une modification de ton code. C'est sûrement pas la mieux optimisée néanmoins elle unie défilement de la barre et bon fonctionnement du programme en général. J'ai aussi fait en sorte que l'on puisse afficher/cacher le texte défilant.
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Button1 = GUICtrlCreateButton("START", 256, 136, 107, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $i, $bar, $isBar = False
_CreateMyBar()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $bar
$test = GUICtrlRead($bar)
$Array = StringSplit($test, "-")
ShellExecute(StringTrimLeft($Array[3], 1))
Case $Button1
If $isBar Then
_DeleteMyBar()
Else
_CreateMyBar()
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _MoveMyText()
If $i = 700 Then $i = 8
ControlMove($Form1,"",$bar,$i,16)
$i += 1
EndFunc
Func _CreateMyBar()
$bar = GUICtrlCreateLabel("Mot1 - Mot2 - Mot3", 8, 16, 223, 17)
$i = 8
AdlibRegister("_MoveMyText",10)
$isBar = True
EndFunc
Func _DeleteMyBar()
AdlibUnRegister("_MoveMyText")
GUICtrlDelete($bar)
$isBar = False
EndFunc