Aide et conseils concernant AutoIt et ses outils.
Ks10
Niveau 6
Messages : 282 Enregistré le : mer. 25 avr. 2012 20:38
Status :
Hors ligne
#1
Message
par Ks10 » jeu. 18 sept. 2014 09:37
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
Modifié en dernier par
Ks10 le jeu. 02 oct. 2014 12:11, modifié 1 fois.
Tlem
Site Admin
Messages : 11773 Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status :
Hors ligne
#2
Message
par Tlem » jeu. 18 sept. 2014 10:08
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.
Ks10
Niveau 6
Messages : 282 Enregistré le : mer. 25 avr. 2012 20:38
Status :
Hors ligne
#3
Message
par Ks10 » jeu. 18 sept. 2014 10:29
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.
TommyDDR
Modérateur
Messages : 2087 Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status :
Hors ligne
#4
Message
par TommyDDR » jeu. 18 sept. 2014 14:24
Prenez le post de Tlem, remplacez "progression" par "défilement" et vous aurez votre réponse.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Ks10
Niveau 6
Messages : 282 Enregistré le : mer. 25 avr. 2012 20:38
Status :
Hors ligne
#5
Message
par Ks10 » jeu. 18 sept. 2014 14:37
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
TommyDDR
Modérateur
Messages : 2087 Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status :
Hors ligne
#6
Message
par TommyDDR » jeu. 18 sept. 2014 15:48
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 ?
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Ks10
Niveau 6
Messages : 282 Enregistré le : mer. 25 avr. 2012 20:38
Status :
Hors ligne
#7
Message
par Ks10 » jeu. 18 sept. 2014 16:17
Les deux
En laissant par default c'est 250Ms , j'ai changer et j'ai mit 500 et 1000Ms mais résultat inchangé.
TommyDDR
Modérateur
Messages : 2087 Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status :
Hors ligne
#8
Message
par TommyDDR » jeu. 18 sept. 2014 16:47
Ce paramètre correspond à l'interval de temps entre 2 appels, il faut donc diminuer ce temps pour appeler plus souvent votre méthode..
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Ks10
Niveau 6
Messages : 282 Enregistré le : mer. 25 avr. 2012 20:38
Status :
Hors ligne
#9
Message
par Ks10 » jeu. 18 sept. 2014 18:37
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
orax
Modérateur
Messages : 1479 Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status :
Hors ligne
#10
Message
par orax » jeu. 18 sept. 2014 19:22
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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
blacksoul305
Membre émérite
Messages : 957 Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status :
Hors ligne
#11
Message
par blacksoul305 » ven. 19 sept. 2014 18:57
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
Étudiant en 2ème année de Licence Informatique.