Page 1 sur 1

[R] Gui dans timer

Posté : mer. 17 déc. 2008 17:38
par mickeich
Bonjour,

Je suis en train de faire un script pour générer des action à intervalles régulières.
Une des actions est d'ouvrir une fenêtre.

Lorsque je crée une Gui avec GuiCreate dans le timer, la fenêtre apparait bien, mais tout se bloque ensuite.
La seule solution pour débloquer que j'ai trouvé est de mettre une MsgBox.
Je ne parle pas de gérer les différents événements pour chaques Gui créés et gérés en parallèles.

Code : Tout sélectionner

$NbTimer variable global qui s'incrémente pour chaque appel de _GuiFille() 

;===============================================================================
;   Fontion qui crèe une GUI
;===============================================================================
Func _GUIFille ()
    Local $COMID, $msg2=0, $NumTimer
    
    $NumTimer = $NbTimer
    
    ;Creation de la GUI
    $COMID = GuiCreate("Choix Port COM " & $NumTimer , 250, 100)
    
    ;charge un Label
    GuiCtrlCreateLabel("Choix du port COM " & $NumTimer & " / " & $COMID, 10, 10)
    
    ;Affiche le Gui
    GUISetState(@SW_SHOW, $COMID)
    
    ;Marche ou se bloque s'il y a le MsgBox ou non
;~  msgbox (0,"GUID" & $NumTimer & " av", $COMID,1)

    
    ; GUI MESSAGE LOOP
    While $msg2 <> $GUI_EVENT_CLOSE
        $msg2 = _GUIGetMsg($COMID)  
    WEnd
    
    GUIDelete ($COMID)
    GuiSetState()
    
EndFunc
La fonction _GUIFille () est appelée par le timer pour créer plusieurs fenêtres.
Selon si je mets le msgbox, ça marche ou pas.
La fonction _GUIGetMsg ($COMID) me permet de récupérer les Msg qui correspondent à la Gui passée en paramètre.
J'aimerais bien déjà comprendre ce blocage avant de continuer.

Je sais pas si j'ai été assez clair.

question subsidiaire : la fonction sleep() arrête le script global ? Si je le met dans un timer, cela bloque uniquement le timer ou tout le script ?

Merci d'avance de votre aide.

Re: [..] Gui dans timer

Posté : mer. 17 déc. 2008 23:42
par Tlem
D'ou vient $NbTimer, $NumTimerCOm ?
Pourquoi à la ligne 15, vous utilisez $COMID qui est le handle de la GUI créé auparavent ?
Pourquoi faire un GuiSetState() après un GUIDelete() ?

Pour faire une GUI fille, vous devriez utiliser le flag parent de la commande GuiCreate.

Par rapport au code que vous donnez, je vous conseillerais plutôt la commande SplashTextOn() et vous évetera tout ceci.

Re: [..] Gui dans timer

Posté : jeu. 18 déc. 2008 17:23
par mickeich
Merci de ton aide,

J'ai réussi à m'en sortir en utilisant GUISetOnEvent et GUICtrlSetOnEvent.
Ce qui simplifie beaucoup les choses pour gérer les évènements.