[R] GUI de surveillance, avec bouton d'arrêt/relance

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

[R] GUI de surveillance, avec bouton d'arrêt/relance

#1

Message par EricF »

Bonjour,
Je voudrais créer une GUI qui permet d'effectuer des actions de surveillance (ça, ça va), mais pouvoir arrêter et relancer la surveillance snas avoir à fermer l'application. J'ai essayé avec un while et la définition d'une variable, mais impossible d'activer le bouton.

Code : Tout sélectionner

    While $actif = 1
        If FileExists("test.txt") Then
            $label = "Fichier test.txt présent"
            GUICtrlSetColor($Label1, 0x00ff00)
        Else
            $label = "Fichier test.txt absent"
            GUICtrlSetColor($Label1, 0xff0000)
        EndIf

        GUICtrlSetData($Label1, $label)
        Sleep(2000)
    WEnd

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            If $actif = 1 Then
                GUICtrlSetData($Button1, "Démarrer")
                $actif = 0
;~              MsgBox(0, "", "$actif est à " & $actif, 2)
            Else
                GUICtrlSetData($Button1, "Arrêter")
                $actif = 1
;~              MsgBox(0, "", "$actif est à " & $actif, 2)
            EndIf
    EndSwitch
WEnd
 
Modifié en dernier par EricF le sam. 19 janv. 2013 20:04, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#2

Message par mikell »

Essaie en mode onevent ça doit marcher
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#3

Message par Tlem »

Au lieu de la première boucle, utilisez une fonction appelée par un AdlibRegister que vous activez ou pas. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#4

Message par EricF »

Plus comme ça ?

Code : Tout sélectionner

Func xxxxx()
        If FileExists("test.txt") Then
            $label = "Fichier test.txt présent"
            GUICtrlSetColor($Label1, 0x00ff00)
        Else
            $label = "Fichier test.txt absent"
            GUICtrlSetColor($Label1, 0xff0000)
        EndIf

        GUICtrlSetData($Label1, $label)
;~      Sleep(2000)
EndFunc

If $actif = 1 Then
    AdlibRegister("xxxxx")
EndIf

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            If $actif = 1 Then
                GUICtrlSetData($Button1, "Démarrer")
                $actif = 0
;~              MsgBox(0, "", "$actif est à " & $actif, 2)
            Else
                GUICtrlSetData($Button1, "Arrêter")
                $actif = 1
;~              MsgBox(0, "", "$actif est à " & $actif, 2)
            EndIf
    EndSwitch
WEnd
Ou une vérification de la valeur de $actif dans la fonction ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#5

Message par Tlem »

Je le verrais plutôt comme ceci :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#6

Message par EricF »

ok, merci, je testerai
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#7

Message par mikell »

Bah le onevent marche aussi ^^
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#8

Message par Tlem »

Certes, mais le code est moins évident à maitriser (au début) pour un novice.
(Perso je mettrais le Sleep plutôt dans la principale, sinon en cas d'appel de fonctions multiples ça va lagger ...).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#9

Message par matwachich »

Euh ... pourquoi faire simple quand on peut faire compliquer! :mrgreen:
► Afficher le texte
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#10

Message par mikell »

C'est pas faux :mrgreen:
Intéressant en tout cas, ça fait 3 méthodes différentes possibles
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
EricF
Niveau 4
Niveau 4
Messages : 72
Enregistré le : mar. 08 mars 2011 23:06
Status : Hors ligne

Re: [..] GUI de surveillance, avec bouton d'arrêt/relance

#11

Message par EricF »

Merci, j'ai tout testé, je verrais ce que ça donne et le plus adapté.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#12

Message par Tlem »

Heuuu, en ce qui me concerne, je déconseille fortement la méthode de mat !
L'appel à une fonction dans la boucle principale n'est vraiment pas des plus recommandé.
Certes, pour le cas présent, pas de risque particulier, mais si le code doit évoluer, ce sera beaucoup moins évident. Et puis lancer une fonction qui vérifie si elle doit réellement être lancé ou non, me parait vraiment pas des plus logique (2 contrôles à chaque tours de boucle juste pour savoir si il faut ou non lancer la fonction ... :? ).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#13

Message par matwachich »

Bah c'est ce que je fais dans presque tous mes scripts, même les plus complexes: Je met même des fonctions complexes de réception TCP (_TCPServer_Process de mon UDF SimpleTCP) dans la boucle principale d'une grosse GUI, et ça ne pose aucun problème. J'aimerai bien quelques explications Tlem, merci! :)

En suite, j'aime mettre les timers dans leurs fonctions respectives par soucis d'organisation du code (ne pas surcharger la boucle principale quoi :P ), si ça ne plait pas, suffit de mettre la vérification du timer dans la boucle :)
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#14

Message par Tlem »

Dans le cas présent, la boucle sert à récupérer les événements de la GUI, or si on rajoute des fonctions dans cette boucle, le temps pris par ces fonctions à de forte chance d'influer sur la détection de ces événements.

Dans l'exemple donné et comme je l'avais signalé, il est clair que la fonction _Verifier() n'aura pas le temps d'influencer la boucle. Mais si on y rajoute des fonctionnalités (avant la première ligne) ou si on rajoute d'autres fonctions dans la boucle principale, alors il y a de fortes chances pour qu'un clic sur un bouton ne soit pas détecté parce qu'on était dans une fonction à ce moment là !

Le temps pris par toutes fonctions après le EndSwitch risque d’empêcher que la ligne $nMsg = GUIGetMsg() détecte l'événement graphique.
Si vous avez la nécessité de lancer des fonctions dans la boucle principale, alors, vous devez passer en mode événementiel (ou utiliser AdlibRegister).
matwachich a écrit :En suite, j'aime mettre les timers dans leurs fonctions respectives par soucis d'organisation du code (ne pas surcharger la boucle principale quoi :P ), si ça ne plait pas, suffit de mettre la vérification du timer dans la boucle :)
C'est assez paradoxal et implique une gymnastique assez spéciale, car en cas de fonctions multiples vous devrez utiliser autant de timer que de fonction !!! Je ne suis pas sure que ce soit optimal comme façon de coder. Ceci dit c'est votre choix et si vous en avez la maitrise, alors tant mieux. Mais ceci ne peut être une méthode généralisée car trop dépendante de tas de facteurs de risque d'erreur.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#15

Message par mikell »

Tlem a écrit :alors il y a de fortes chances pour qu'un clic sur un bouton ne soit pas détecté parce qu'on était dans une fonction à ce moment là !
Voilà très exactement pourquoi je préfère le mode évènementiel ...
http://www.autoitscript.com/wiki/Interr ... g_function
Même si dans ce cas précis (temps d'exécution très court de la fonction appelée) le AdlibRegister semble effectivement le plus adapté, de manière générale le problème reste le même (la fonction appelée est bloquante)
La solution idéale (?) pour un script plus complexe devrait probablement être un mix de AdlibRegister et de mode évènementiel (ou de GuiRegisterMsg) avec flag d'interruption dans la fonction appelée
Quoique, timer + flag ça marcherait aussi, mais toujours avec du eventmode :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#16

Message par Tlem »

Même si le mode événementiel est préférable dans la plupart des situations, il n'est pas le remède à tout les maux. ;)

De plus, pour une interface graphique complexe, il implique un code généralement plus long (mais mieux structuré), sans compter la gestion des événement légèrement plus complexe. ;)

Ceci dit, je te rejoint sur la qualité du code et les risques moins importants de défaut de gestion de la partie GUI.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#17

Message par mikell »

Tlem a écrit :Même si le mode événementiel est préférable dans la plupart des situations, il n'est pas le remède à tout les maux. ;)
Hé, j'ai pas dit ça :shock:
Je dis pas qu'il faut mettre les boucles While à la poubelle, juste que le mode onevent est généralement préférable pour la réactivité du script
Pour mon script de countdown ( http://www.autoitscript.fr/forum/viewto ... f=6&t=9633 ) les 2 versions (GuiGetMsg et eventmode) fonctionnent, même si pour la réactivité il a fallu intégrer obligatoirement du GuiRegisterMsg (notamment pour imposer ces flags d'interruption de fonction évoqués plus haut)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#18

Message par Tlem »

mikell a écrit :Hé, j'ai pas dit ça :shock:
Hé, j'ai pas dit que tu l'avait dit ... :P :lol:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#19

Message par mikell »

Ah mais dis, c'est qu'on aurait presque dit que tu avais dit que je l'avais dit...
Bon ok, dans ce cas je ne dirai pas que tu as dit que je l'ai dit
Voilà c'est dit
:wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] GUI de surveillance, avec bouton d'arrêt/relance

#20

Message par Tlem »

Ceci dit ....




Bon allez, il faut passer le balais hein !
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre