stopsoftwarepatents.eu petition banner

AutoIt Français

Communauté Francophone AutoIt
* Connexion   * M’enregistrer

Heures au format UTC + 1 heure


Règles du forum

Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
Hors ligne
Niveau 1
Niveau 1
Inscription: Mer 21 Juil 2010 15:13
Messages: 3

Dernier message
Sujet du message: [R] Gestion des entrées GUICtrlCreateList
MessagePosté: 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 ...

Voici une partie de mon code :
Spoiler pour :
Code
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $Form1, $Progress1, $List1, $Label1, $Button1, $Button2, $StatusBar1
$Form1 = GUICreate("Déploiement EAR", 288, 335, 520, 280)
$Progress1 = GUICtrlCreateProgress(68, 288, 150, 17)
$List1 = GUICtrlCreateList("", 30, 59, 233, 188)
$Label1 = GUICtrlCreateLabel("En cours de déploiement...", 27, 16, 232, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Lancer", 46, 255, 67, 25)
$Button2 = GUICtrlCreateButton("Arreter", 173, 255, 67, 25)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUISetState(@SW_SHOW)
;-----------------------------------------------------------------------------------------------------------

$string = "Debut des opérations;Verification connection DB TNS;Verification connection DB / URSALES,Verification connection DB / SYS;Verification password OC4J;Verification DB Locale;Recherche EAR;Recherche Plan de deploiement EAR;Recherche EAR;Arret filezilla FTP Server;Arret Oracle Application Server;Verification Arret Oracle Application Server;Sauvegarde systeme de fichiers et DB;Stop/Start DB to clear sessions;Effacement du schema URSALES et recreation à vide DB;Import du schema URSALES;Execution eventuelle d'un script SQL;Changement Password URSALES dans DB;Suppression instance OC4J;Nettoyage logs OC4J;Creation instance OC4J;Copie system-jazn;Copie server.xml;Copie shared-lib;Demarrage Oracle Application Server;Verification de connexion OC4J;Deploiement EAR;Arret Oracle Application Server;Verification Arret Oracle Application Server;Ajout eventuel des batchs UR;Copie opmn.xml;Modification opmn.xml;Copie httpd.conf;Modification data-sources.xml;Remplacement data-sources.xml;Effacement data-sources.xml original;Ajout droits DB pour URSALES;Demarrage Oracle Application Server;Modification IE pour trusted site;Execution script pre-dbsynchro;Execution DBSynchro-1;Execution script post-dbsynchro;Arret Oracle Application Server;Verification Arret Oracle Application Server;Demarrage Oracle Application Server;Attente demarrage batch UR;Execution script after upgrade;Arret Oracle Application Server;Suppression droits DB pour URSALES;Execution rename store after upgrade;Demarrage Oracle Application Server;Attente demarrage batch UR;Attente demarrage batch UR 90s;Arret Oracle Application Server;Verification Arret Oracle Application Server;Suppression logs UR;Reaffectation droits DB;Reorganisation DB Data;Reorganisation DB Index;Calcul des stats DB SYS;Calcul des stats DB URSALES;Optimisation TCP Windows;Demarrage Oracle Application Server;Activation no epxire sur comptes OS;Demarrage filezilla FTP Server;Fin des Opérations"
$listmsg = StringSplit($string,";")
$i=1
MsgBox(0,"",$listmsg[$i])

;-----------------------------------------------------------------------------------------------------------

$begin = TimerInit()
While 1
$nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
        GUICtrlSetData($List1, $listmsg[$i])
        GUICtrlSetData( $Progress1 , 0)
        _GUICtrlStatusBar_SetText( $StatusBar1, "Etat d'avancement: 0%" )
        Sleep(1000)
        GUICtrlSetData($List1, "")
        GUICtrlSetData($List1, $listmsg[$i]&" OK|")
        Sleep(1000)
        $i=$i+1
        GUICtrlSetData($List1, $listmsg[$i])
        GUICtrlSetData( $Progress1 , 1)
        _GUICtrlStatusBar_SetText( $StatusBar1, "Etat d'avancement: 1%" )
        Sleep(1000)
        GUICtrlSetData($List1, "")
        GUICtrlSetData($List1, $listmsg[$i]&" OK|")
       
    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.

 Profil  
 
AutoIt Français
Hors ligne
Modérateur
Modérateur
Inscription: Dim 06 Juil 2008 08:11
Messages: 427
Sujet du message: Re: [..] Gestion des entrées GUICtrlCreateList
MessagePosté: 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) .

Spoiler pour :
Code

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
HotKeySet('{ESC}', 'annulation')
Global $annulation = 0
Global $Form1, $Progress1, $List1, $Label1, $Button1, $Button2, $StatusBar1
$Form1 = GUICreate("Déploiement EAR", 288, 335, 520, 280)
$Progress1 = GUICtrlCreateProgress(68, 288, 150, 17)
$List1 = GUICtrlCreateList("", 30, 59, 233, 188)
$Label1 = GUICtrlCreateLabel("Prêt pour le déploiement", 27, 16, 232, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Lancer", 46, 255, 67, 25)
$Button2 = GUICtrlCreateButton("Arreter", 173, 255, 67, 25)
GUICtrlSetState($Button2,$GUI_DISABLE)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUISetState(@SW_SHOW)
;-----------------------------------------------------------------------------------------------------------

$string = "Debut des opérations;Verification connection DB TNS;Verification connection DB / URSALES,Verification connection DB / SYS;Verification password OC4J;Verification DB Locale;Recherche EAR;Recherche Plan de deploiement EAR;Recherche EAR;Arret filezilla FTP Server;Arret Oracle Application Server;Verification Arret Oracle Application Server;Sauvegarde systeme de fichiers et DB;Stop/Start DB to clear sessions;Effacement du schema URSALES et recreation à vide DB;Import du schema URSALES;Execution eventuelle d'un script SQL;Changement Password URSALES dans DB;Suppression instance OC4J;Nettoyage logs OC4J;Creation instance OC4J;Copie system-jazn;Copie server.xml;Copie shared-lib;Demarrage Oracle Application Server;Verification de connexion OC4J;Deploiement EAR;Arret Oracle Application Server;Verification Arret Oracle Application Server;Ajout eventuel des batchs UR;Copie opmn.xml;Modification opmn.xml;Copie httpd.conf;Modification data-sources.xml;Remplacement data-sources.xml;Effacement data-sources.xml original;Ajout droits DB pour URSALES;Demarrage Oracle Application Server;Modification IE pour trusted site;Execution script pre-dbsynchro;Execution DBSynchro-1;Execution script post-dbsynchro;Arret Oracle Application Server;Verification Arret Oracle Application Server;Demarrage Oracle Application Server;Attente demarrage batch UR;Execution script after upgrade;Arret Oracle Application Server;Suppression droits DB pour URSALES;Execution rename store after upgrade;Demarrage Oracle Application Server;Attente demarrage batch UR;Attente demarrage batch UR 90s;Arret Oracle Application Server;Verification Arret Oracle Application Server;Suppression logs UR;Reaffectation droits DB;Reorganisation DB Data;Reorganisation DB Index;Calcul des stats DB SYS;Calcul des stats DB URSALES;Optimisation TCP Windows;Demarrage Oracle Application Server;Activation no epxire sur comptes OS;Demarrage filezilla FTP Server;Fin des Opérations"
$listmsg = StringSplit($string, ";")

;-----------------------------------------------------------------------------------------------------------

$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 ******************************

                GUICtrlSetData($List1, $listmsg[$i] & " OK")
                Sleep(500)
                $pourcent += $pourcent_base ;permet de calculer la progression
                GUICtrlSetData($Progress1, $pourcent)
                _GUICtrlStatusBar_SetText($StatusBar1, "Etat d'avancement: " & Round($pourcent, 0) & '%')

                If $annulation = 1 Then ExitLoop
            Next
            If $annulation = 0 Then
                GUICtrlSetData($Label1, "Déploiement terminé !")
            Else
                $annulation = 0
                    GUICtrlSetData($List1, "")
                    GUICtrlSetColor($List1, '0xff0000')
                    GUICtrlSetData($List1, "Déploiement annulé")
                    GUICtrlSetData($Label1, "Prêt pour le déploiement")
                GUICtrlSetData($Label1, "Déploiement annulé !")
                GUICtrlSetState($Button1,$GUI_ENABLE)
                GUICtrlSetState($Button2,$GUI_DISABLE)
            EndIf

        Case $Button2
            Annulation()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func Annulation()
    $annulation = 1
EndFunc   ;==>Annulation



Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )

 Profil  
 
AutoIt Français
Hors ligne
Niveau 1
Niveau 1
Inscription: Mer 21 Juil 2010 15:13
Messages: 3
Sujet du message: Re: [..] Gestion des entrées GUICtrlCreateList
MessagePosté: 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é!
Spoiler pour :
Code
#include <WindowsConstants.au3>
#include <GUIListBox.au3>
#include <GuiStatusBar.au3>
#include <GuiListView.au3>

;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 

Func _itemadd($percent,$ret)
       
    $item1=GUICtrlCreateListViewItem($listmsg[$i], $listview)
    GUICtrlSetData($Progress1 , $percent)
    _GUICtrlStatusBar_SetText($StatusBar1, "Etat d'avancement: "&$percent&"%")
    if $ret = 0 Then
        GUICtrlSetData($item1,"|OK")
    Else
        GUICtrlSetData($item1,"|NOK")
    EndIf
    $i=$i+1
    _GUICtrlListView_ClickItem($ListView, _GUICtrlListView_GetItemCount($ListView) - 1)
EndFunc
   
Func _itempass($percent)
       
    $item1=GUICtrlCreateListViewItem($listmsg[$i], $listview)
    GUICtrlSetData($Progress1 , $percent)
    _GUICtrlStatusBar_SetText($StatusBar1, "Etat d'avancement: "&$percent&"%")
    GUICtrlSetData($item1,"|-")

    $i=$i+1
EndFunc

Global $Form2, $Progress1, $List1, $Label1, $Button1, $Button2, $StatusBar1
$Form2 = GUICreate("Déploiement EAR", 533, 332, -1, -1)
$Progress1 = GUICtrlCreateProgress(191, 288, 150, 17)
;~ GUICtrlSetStyle($Progress1,0x040A)
GUICtrlSetFont(-1, 4, 400, 0, "MS Sans Serif")
$listview = GUICtrlCreateListView("Description|Status", 21, 59, 497, 188, BitOR($LBS_NOTIFY,$WS_VSCROLL,$WS_BORDER))
GUICtrlSendMsg(-1, 0x101E, 0, 420)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
$Label1 = GUICtrlCreateLabel("En cours de déploiement...", 150, 16, 232, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Lancer", 169, 255, 67, 25)
$Button2 = GUICtrlCreateButton("Arreter", 296, 255, 67, 25)
$StatusBar1 = _GUICtrlStatusBar_Create($Form2)
GUISetState(@SW_SHOW)

;-----------------------------------------------------------------------------------------------------------
;Récupération étapes
$string = FileRead(@ScriptDir&"\liste.txt")
$listmsg = StringSplit($string,@LF)
For $i = 1 to $listmsg[0]
    $listmsg[$i] = StringTrimRight($listmsg[$i], 1)
Next
$i=1
;-----------------------------------------------------------------------------------------------------------

$begin = TimerInit()

While 1
    sleep(10)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
#region 
;0% = Démarrage----------------------------------------------------------------------------------------------------------- 
    _itemstart()
    _itemadd(0,0)
#endregion
#region
;25% = Exécution du batch-----------------------------------------------------------------------------------------------------------   
    _itemstart()
        if runWait("batchs\bonjour.bat")=0  Then
            _itemadd(1,0)
        else
            _itemadd(1,1)
            _break()
        EndIf
#endregion
#region
;50% = Recherche fichier TXT----------------------------------------------------------------------------------------------------------- 
    _itemstart()   
    $cpt=0
    $search = FileFindFirstFile("temp\*.txt")
    ; Check if the search was successful
    If $search = -1 Then
        _itempass(50)
    Else
        While 1
            $file = FileFindNextFile($search)
            If @error Then
                ExitLoop
                _itemadd(50,1)
            Else
                If $cpt=0 Then
                _itemadd(50,0)
                EndIf
                $txtfile=$file
                $cpt=$cpt+1
            EndIf
        WEnd
        $txtfile="temp\"&$txtfile
    EndIf
    ; Close the search handle
    FileClose($search)
#endregion
#region
;75% = Recherche fichier TXT----------------------------------------------------------------------------------------------------------- 
    _itemstart()
    FileCopy(@ScriptDir & "\data\pool.xml", "D:\perso\pool.xml")
    If @error<>0 Then
        _itemadd(75,1)
    Else
        _itemadd(75,0)
    EndIf
#endregion
#region
;75% = Fin-----------------------------------------------------------------------------------------------------------   
    _itemstart()
    _itemadd(100,0)
#endregion
Case $Button2, $GUI_EVENT_CLOSE
    Exit
EndSwitch
WEnd


Comme me le disait SagePourpre, n'existe t'il pas un moyen pour que le bouton arrêter puisse stopper complètement la procédure en cours?

 Profil  
 
AutoIt Français
Hors ligne
Niveau 1
Niveau 1
Inscription: Mer 21 Juil 2010 15:13
Messages: 3

Haut
Sujet du message: Re: [..] Gestion des entrées GUICtrlCreateList
MessagePosté: Jeu 26 Aoû 2010 08:59 

On ne m'a pas beaucoup aidé, c'est bien dommage.
Ou peut être ma question était-elle mal posée et peu compréhensible?

Cependant, j'ai solutionné mon problème tout seul comme un grand :
Code


FUNC _itemstart($x)
    $item=GUICtrlCreateListViewItem($x, $listview)
    _GUICtrlListView_ClickItem($ListView, _GUICtrlListView_GetItemCount($ListView) - 1)
    return $item
ENDFUNC

Func _itemadd($percent,$ret, $item1)
   
    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 -.

J'espère avoir été un peu clair :P

A bientôt!

 Profil  
 
Afficher les messages postés depuis:  Trier par  

Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


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

Rechercher:
Aller à:  

AutoIt Français
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group, Sniper_Blue phpBB-3.0 Style © 2007 Sniper_E
Traduction par: phpBB-fr.com