Sujet du message: [R] Gestion des entrées GUICtrlCreateList
Posté: Lun 26 Juil 2010 09:58
Bonjour,
Je suis débutant sur autoit.
Je souhaiterai créé une GUI avec une Liste (GUICtrlCreateList) générant des logs avec leur status. Je m'explique, plusieurs tâches de fond sont exécutées, et pour chaque tâche, un contrôle y est attaché. Avant l'exécution de la tâche, une chaine de caractère est envoyée à la liste du type : "Tâche 1 > en cours" (ligne 1) Lorsque la tâche 1 est terminé, un contrôle scripté est exécuté, et selon son retour, une autre chaine de caractère est envoyée à la liste du type : "Tâche 1 > ok/nok" (ligne 1) En gros je veux que ma (GUICtrlCreateList) affiche 1 tâche par ligne qui soit remplacée (écrasée) par chaque novuel état.
"Tâche 1 > en cours" remplacée par "Tâche 1 > ok" (ligne 1) "Tâche 2 > en cours" remplacée par "Tâche 2 > ok" (ligne 2) "Tâche 3 > en cours" remplacée par "Tâche 3 > ok" (ligne 3) ... ainsi de suite ...
Case $Button2, $GUI_EVENT_CLOSE Exit EndSwitch WEnd
Mais il ne fonctionne pas très bien
Merci d'avance pour votre aide!
Dernière édition par bountykiller1er le Jeu 26 Aoû 2010 09:34, édité 1 fois.
AutoIt Français
SagePourpre
Modérateur
Inscription: Dim 06 Juil 2008 08:11 Messages: 427
Sujet du message: Re: [..] Gestion des entrées GUICtrlCreateList
Posté: Lun 26 Juil 2010 18:55
Voilà quelque chose de plus fonctionnel. Il n'y a qu'un seul problème, le bouton arrêter ne peut être activer pendant la boucle d'opérations (Il faut utiliser la touche Escape pour annuler la progression) .
$begin = TimerInit() While 1 Sleep(100) ; Il est important d'avoir un sleep au début ou à la fin de la boucle principale ( ça permet au processeur de respirer ) $nMsg = GUIGetMsg() Switch $nMsg Case $Button1 GUICtrlSetState($Button2,$GUI_ENABLE) GUICtrlSetState($Button1,$GUI_DISABLE) GUICtrlSetColor($List1, '0x000000') GUICtrlSetData($Label1, "En cours de déploiement...") GUICtrlSetData($Progress1, 0) Local $pourcent, $pourcent_base = 100 / $listmsg[0] _GUICtrlStatusBar_SetText($StatusBar1, "Etat d'avancement: 0%") For $i = 1 To $listmsg[0] ; Ce qui manquait le plus à ce script GUICtrlSetData($List1, "") GUICtrlSetData($List1, $listmsg[$i] & '|') Sleep(500) ; Opérations à accomplir ********************* ; code ; code ; code ; Fin des opérations ******************************
Le Sage Pourpre, pour qui la vie est tellement plus belle vue du haut de son Pouf = )
AutoIt Français
bountykiller1er
Niveau 1
Inscription: Mer 21 Juil 2010 15:13 Messages: 3
Sujet du message: Re: [..] Gestion des entrées GUICtrlCreateList
Posté: Lun 09 Aoû 2010 22:18
Bonjour,
Merci SagePourpre pour ta réponse, ton post m'a un peu aidé à avancer, même s'il ne solutionne pas la question de base.
J'ai donc essayé d'avancer de mon coté, et j'ai utilisé la : "Listview", avec 2 colonnes. Une première colonne pour l'étape, et la seconde pour l'état de celle-ci.
Cependant, je n'ai pas trouvé comment la faire fonctionner comme je le souhaite. Je souhaiterai, mettre dans la colonne "status", l'état "en cours", pendant l'exécution du traitement. J'ai pour le moment mis celui-ci dans un "label", en haut de ma GUI.
Voici un extrait de mon code que j'ai remanié/compressé!
;Génération du fichier Liste (Ce fichier n'est pas généré dans le script d'origine) FileOpen(@ScriptDir&"\liste.txt",2) FileWrite(@ScriptDir&"\liste.txt","Démarrage"&@CRLF&"Exécution du batch"&@CRLF&"Recherche txt"&@CRLF&"copie de ficheir"&@CRLF&"Fin ") FileClose(@ScriptDir&"\liste.txt")
Func _itemstart() $Label1 = GUICtrlCreateLabel("Tâche en cours : "&$listmsg[$i], 150, 16, 232, 28) GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif") sleep(1000) EndFunc
GUICtrlSetData($Progress1 , $percent) _GUICtrlStatusBar_SetText($StatusBar1, "Etat d'avancement: "&$percent&"%") if $ret = 0 Then GUICtrlSetData($item1,"|OK") ElseIf $ret = 1 Then GUICtrlSetData($item1,"|ERR") Elseif $ret = 2 Then GUICtrlSetData($item1,"|En cours") Else GUICtrlSetData($item1,"|-") EndIf _GUICtrlListView_ClickItem($ListView, _GUICtrlListView_GetItemCount($ListView) - 1) EndFunc
J'ai créé 2 fonctions, La première me permet d'envoyer le titre de la tâche en cours dans la première colonne de mon listview. Elle me renvoi la ligne ajouté que je pourrai ensuite modifié dans ma deuxième fonction. La deuxième fonction (qui est en faite une procédure) me permet de contrôler et de modifier "l'état" (qui correspond à ma deuxième colonne). A chaque appel de celle-ci selon le paramètre envoyé modifiera l'item contenu dans cette même ligne.
J'ai ainsi 4 état disponible : En cours, Ok, Err et -.
Utilisateurs parcourant ce forum: Exabot [Bot] et 2 invités
Vous ne pouvez pas poster de nouveaux sujets Vous ne pouvez pas répondre aux sujets Vous ne pouvez pas éditer vos messages Vous ne pouvez pas supprimer vos messages Vous ne pouvez pas joindre des fichiers