Page 1 sur 1

[R] Plusieurs GUICreate dans le meme script

Posté : ven. 26 juin 2009 03:55
par sscssc
Salut, voila je veux faire une page setting qui créerais une nouveau Gui mon problemme c'est que quand je mes un nouveau GUICreate dans le script le programme ne répond plus.

Pour mon premier test je les mit dans une fonction que j'ais ensuite placer dans mon premier switch mais se ne marche pas
pour mon deuxième test j'ai placer tout le script directement dans le switch le résulta est le même

peut-être faudrait-il que je ferme mon tout premier GUICreate avant d'ouvrir le seconds mais je ne ces comment faire :/


merci

Re: [..] Plusieurs GUICreate dans le meme script

Posté : ven. 26 juin 2009 05:58
par TaPuZ
[TRADUCTION]
Salut.
Je voudrais faire une page setting pour créer une nouvelle Gui.
Mon problème est que quand je mets un nouveau GUICreate dans le script le programme ne répond plus.

Pour mon premier test, je l'ai mis dans une fonction que j'ai ensuite placée dans mon premier switch, mais cela ne fonctionne pas.
Pour mon deuxième test, j'ai placé tout le script directement dans le switch : Le résultat est le même.

Peut-être faudrait-il que je ferme mon tout premier GUICreate avant d'ouvrir le second, mais je ne sais comment faire :/

Je remercie par avance toute réponse pertinente.
[/TRADUCTION]

Salut. Après un petit débug de ta question, la turbidité persiste.
Pour ton premier test, tu dis avoir placé une fonction dans un switch. Je ne suis pas sûr de comprendre.
Est-ce l'appel de la fonction qui réside dans le switch, ou la fonction elle-même??? (Auquel cas, tout deviendrait transparent, à l'instar d'une eau glauque volée dans un lagon paradisiaque...).
Bref, laisse nous tout ou partie de code, qu'on puisse jeter un oeil dessus, que je puisse te dire que j'en sais rien, et qu'un pro du site puisse résoudre tout cela.

Re: [..] Plusieurs GUICreate dans le meme script

Posté : ven. 26 juin 2009 06:47
par sscssc
1.

Code : Tout sélectionner

$MainGui = GUICreate("test", 520, 323, 303, 141)
$Setting = GUICtrlCreateButton("Setting", 400, 240, 113, 33, $WS_GROUP)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Setting
         [color=#FF0000]setting()[/color]
        EndSwitch

Wend

[color=#FF0000]Func setting()
$SettingGui = GUICreate("Setting", 229, 296, 471, 185)
$Label1 = GUICtrlCreateLabel("test", 8, 48, 139, 17)
$Input1 = GUICtrlCreateInput("", 152, 48, 49, 21)
while 1
                Switch $nMsg
                    Case $GUI_EVENT_CLOSE
                        Exit
                    Case $SOK
                    IniWrite("config.ini", "test", "test", $Input1)
                EndSwitch

            Wend
EndFunc[/color]
2.

Code : Tout sélectionner

$MainGui = GUICreate("test", 520, 323, 303, 141)
$Setting = GUICtrlCreateButton("Setting", 400, 240, 113, 33, $WS_GROUP)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Setting

[color=#FF0000]    $SettingGui = GUICreate("Setting", 229, 296, 471, 185)
    $Label1 = GUICtrlCreateLabel("test", 8, 48, 139, 17)
    $Input1 = GUICtrlCreateInput("", 152, 48, 49, 21) 

              while 1
                Switch $nMsg
                    Case $GUI_EVENT_CLOSE
                        Exit
                    Case $SOK
                       IniWrite("config.ini", "test", "test", $Input1)
                EndSwitch
            Wend
        EndSwitch

Wend[/color]
 
plus... compréhensible?

Re: [..] Plusieurs GUICreate dans le meme script

Posté : ven. 26 juin 2009 07:39
par SagePourpre
Je ne comprends pas vraiment Guigetmsg étant donnée que je m'en suis vite désintéressé
au profit de ceci :


Premièrement, au début de ton script (après les include) ajoute cette ligne

Code : Tout sélectionner

Opt("GUIOnEventMode", 1)

Ensuite, après chaque contrôle (bouton, checkbox, etc)
tu peux ajouter ceci :

Code : Tout sélectionner

GUICtrlSetOnEvent($Setting,"setting")
En faisant cela, tu associes un événement à une fonction.






P.s. : Il est important de noter qu'en utilisant ceci

Code : Tout sélectionner

Opt("GUIOnEventMode", 1)
guigetmsg ne fonctionnera plus (puisque qu'il est remplacé au profit de GUISetOnEvent() et GUICtrlSetOnEvent()



Je met à ta disposition cet exemple ci-dessous parfaitement fonctionnel. (Si tu utilises Koda pour créer une gui, c'est toujours
ce procédé qui est utilisé plutôt que guigetmsg.







Code : Tout sélectionner

#include <GUIConstants.au3>
#include <WindowsConstants.au3>
Global $_setting

Opt("GUIOnEventMode", 1)


$MainGui = GUICreate("test", 520, 323, 303, 141)
$Setting = GUICtrlCreateButton("Setting", 400, 240, 113, 33, $WS_GROUP)
GUICtrlSetOnEvent($Setting,"setting")
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUISetState(@SW_SHOW)

while 1 
    
    Sleep(200)
    
WEnd



Func setting()
    
    $_setting = GUICreate("Setting", 220, 323, 303, 141)
    GUISetOnEvent($GUI_EVENT_CLOSE,"close")
    GUISetState(@SW_SHOW)
EndFunc


Func _exit()
    Exit
EndFunc

Func close()
GUIDelete($_setting)    
EndFunc
 

Re: [..] Plusieurs GUICreate dans le meme script

Posté : ven. 26 juin 2009 07:46
par Tlem
Comme le dit SagePourpre, le mode événementiel présente parfois une bonne alternative à des codes faisant appel à plusieurs GUI.

Cela dit, pour votre cas, je dirais tout simplement :
Vous partez d'une boucle While/Wend de votre première GUI puis de cette boucle, vous allez dans une seconde boucle While/Wend.
Le problème, c'est que sur cette deuxième GUI vous vous retrouvez 'prisonnier' de la seconde boucle ...

Donc puisque cette boucle est appelée dans une autre, il faut la gérer autrement.
Et dans ce cas le Case $GUI_EVENT_CLOSE ne doit pas quitter par Exit (sinon le script se ferme) mais par ExitLoop. Idem pour le Case $SOK, une fois l'action réalisée (IniWrite), il faut sortir de cette boucle While/Wend par un ExitLoop.

Si vous placez le code de votre deuxième GUI dans une fonction, vous devez utilisez la commande Return en lieu et place de ExitLoop. ;)

Re: [R] Plusieurs GUICreate dans le meme script

Posté : sam. 27 juin 2009 21:18
par sscssc
sais bon tout marche

Merci