[..] GUI ne veut pas se fermer

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

[..] GUI ne veut pas se fermer

#1

Message par alex1205 »

Bonjour,

Un de vous pourrait m'éclairer dans mon script
La fenêtre ne veut pas se fermer. Ce script est basique mais, c'est mon cerveau qui beug.
Ai-je oublié quelque chose ?
Voici le script :

Code : Tout sélectionner

Func VerifMessage($sEdit, $nPORT = 33891, $szIPADDRESS = @IPAddress1)
    TCPStartup()
    $MainSocket = TCPListen($szIPADDRESS, $nPORT)
    Do
        $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    While 1
        $msg = GUIGetMsg()
        $recv = TCPRecv($ConnectedSocket, 2048)
        If $recv <> "" Then GUICtrlSetData($sEdit, "Votre ami vous a envoyé un message :" & @CRLF & $recv)
    WEnd
    If @error Then
        Return -1
    ElseIf Not @error Then
        Return 0
    EndIf
EndFunc   ;==>VerifMessage
Func EnvoiMessage($sMessage, $IP = @IPAddress1, $sPort = 33891)
    TCPStartup()
    $ConnectedSocket = TCPConnect($IP, $sPort)
    $szData = $sMessage
    While 1
        If @error Or $szData = "" Then ExitLoop
        TCPSend($ConnectedSocket, $szData)
    WEnd

    If @error Then
        Return -1
    ElseIf Not @error Then
        Return 0
    EndIf
EndFunc   ;==>EnvoiMessage
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Chat", 1067, 638, 437, 248)
$Edit1 = GUICtrlCreateEdit("", 48, 456, 841, 161)
GUICtrlSetColor(-1, 0x000000)
$Button1 = GUICtrlCreateButton("==>Envoyer<==", 944, 528, 83, 25, $WS_GROUP)
$Edit2 = GUICtrlCreateEdit("", 24, 16, 993, 417)
GUICtrlSetColor(-1, 0x000000)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            exit
        Case $Button1
            If $Edit1 <> "" Then
                EnvoiMessage(GUICtrlRead($Edit1), $Edit2)
            ElseIf $Edit1 = "" Then
                MsgBox(48, "Erreur", "Le contenu est vide")
            EndIf
        EndSwitch
    VerifMessage(@IPAddress1, $Edit2)
WEnd
Merci d'avance (parce que tous mes problèmes d'AutoIt sont résolues par vous)
Alex1205
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] GUI ne veut pas se fermer

#2

Message par Yogui »

Votre erreur est ici :

Code : Tout sélectionner

        EndSwitch
    VerifMessage(@IPAddress1, $Edit2)
WEnd

Vous ne pouvez pas mettre cette appel de fonction ici

Ce que fait votre code :

Il affiche la GUI puis boucle à l'infinie dans votre fonction

je vous conseil de lire la doc de la fonction :AdlibRegister('nomdelafonction')

Pour solutionner votre problème
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] GUI ne veut pas se fermer

#3

Message par alex1205 »

Mais mon AutoIt ne marche pas avec Adlib
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] GUI ne veut pas se fermer

#4

Message par Yogui »

:shock: heu c'est quoi votre verion :shock:

sans cette fonction je ne vois pas de solution ...

déjà faire une fonction sans while infini serai un bon point de départ ... la mettre en case else mais bon pas génial la solution ...
alex1205
Niveau 5
Niveau 5
Messages : 123
Enregistré le : dim. 07 mars 2010 13:59
Status : Hors ligne

Re: [..] GUI ne veut pas se fermer

#5

Message par alex1205 »

Enfin ça marche mais il faut la mettre dans la boucle ou en dehors ?
Le "je ne sais pas" et "j'y arrive pas" n'existe dans mon vocabulaire. Toutes Questions ont une réponse, cherchez et vous la trouverai. Utilisez Recherche du forum et vous verrez. Si [blink]Aucune[/blink] question ne tient à votre problème, créez un sujet.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] GUI ne veut pas se fermer

#6

Message par SagePourpre »

Opt('TrayIconDebug',1)

peut parfois être une bonne solution pour identifier rapidement un problème.


Dans le cas de ton script, cette boucle est problématique

Code : Tout sélectionner

Do
        $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

Si $ConnectedSocket retourne -1 ( le serveur est déconnecté ou la connexion internet est coupée, ta
boucle "bloque" ton programme à cet endroit.

L'ajout d'un "timeout" serait à considérer...

Code : Tout sélectionner

$timer = TimerInit()
Do
        $ConnectedSocket = TCPAccept($MainSocket)
        $timeout = TimerDiff($timer)
    Until $ConnectedSocket <> -1 Or $timeout = 500 ; valeur en  millisecondes 
 

Ce n'est qu'une suggestion, mais en aucun cas une solution, puisque même si tu intègres le timeout, sous sa forme
actuelle, ton script rencontrera toujours le même problème...


Afin de le solutionner, je te recommende l'utilisation de
Opt('GuiOnEventMode',1)

voici un exemple fonctionnel basé sur ton script.
► Afficher le texte

Dans le script original, j'ai également détecté une erreur avec $edit1 qui était utilisé à certains endroits de façon
incorrecte ( if $edit1 = "" alors qu' $edit1 représente uniquement l'id du contrôle et non pas son contenu )
Ceci dit, dans l'exemple de script précédent, j'en ai profité pour corriger ce détail. )
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre