Page 1 sur 1

[R] scintillement quand guictrlsetdata dans while

Posté : jeu. 14 févr. 2008 23:53
par arrkhan
desole pour le titre mais je me voyais pas mettre besoin d'aide ^^

je m'explique, ce soir, etant celibataire un jour de saint valentin je me suis decide a coder (pour changer), mais je m'egare....

bon..., alors, le code ci-apres fonctionne a peu pres comme je le souhaite sauf que comme le GUICtrlSetData est dans la boucle while, il est renouvelé tres souvent, d'ou les sleep, mais ca ne l'empeche pas de clignoter qq peu, comment faire ?, de plus a cause des sleeps, l envoie de la commande du bouton met un certains temp ainsi que la fermeture de la fenetre ...

Code : Tout sélectionner

GUICreate("", 200, 200)
$Desc0 = "Veuillez choisir un test ..."
$Desc1 = "test n°1"
$Desc2 = "test n°2"
$Desc3 = "test n°3"
$Test = GUICtrlCreateCombo("Choix du test…", 10, 10, 180, 20)
GUICtrlSetData(-1, "test1|test2|test3", "Choix du test…")
GUICtrlCreateLabel("Description :", 10, 50)
$Desc = GUICtrlCreateLabel("", 10, 70, 180, 75)
$TestButton = GUICtrlCreateButton("TEST", 10, 160, 50, 20)

GUISetState()
While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then ExitLoop
    $GUIRead = GUICtrlRead($Test)
    Select
        Case $GUIRead = "Choix du test…"
            GUICtrlSetData($Desc, $Desc0)
            Sleep(100)
            If $msg = $TestButton Then
                MsgBox(0, "", $GUIRead)
            EndIf
        Case $GUIRead = "test1"
            GUICtrlSetData($Desc, $Desc1)
            Sleep(100)
            If $msg = $TestButton Then
                MsgBox(0, "", $GUIRead)
            EndIf
        Case $GUIRead = "test2"
            GUICtrlSetData($Desc, $Desc2)
            Sleep(1)
            If $msg = $TestButton Then
                MsgBox(0, "", $GUIRead)
            EndIf
        Case $GUIRead = "test3"
            GUICtrlSetData($Desc, $Desc3)
            If $msg = $TestButton Then
                MsgBox(0, "", $GUIRead)
            EndIf
    EndSelect
WEnd
Exit
...donc test suivant sur le meme principe en utilisant opt(guioneventmode) pour me passer du while et du meme coup du scintillement et des temps de latence de l interface mais, utilisant egalement un tableau, je suis completement perdu, j'ai beaucoup de mal avec les tableau et les for...next

Code : Tout sélectionner

#include<GuiConstants.au3>
Dim $x
Opt("GUIOnEventMode", 1)

$Test = "test1|test2|test3"
$Desc = "test n°1|test n°2|test n°3"

Global Const $a_Test = StringSplit($Test, "|")
Global Const $a_Desc = StringSplit($Desc, "|")

GUICreate("", 200, 200)
$Combo = GUICtrlCreateCombo("Choix du test…", 10, 10, 180, 20)
GUICtrlSetData(-1, $Test, "Choix du test…")
GUICtrlCreateLabel("Description :", 10, 50)
$DescLabel = GUICtrlCreateLabel("", 10, 70, 180, 75)
;GUICtrlSetOnEvent(GUICtrlSetData($DescLabel, $a_Desc[$x]), "_TestDesc")
GUICtrlSetOnEvent($DescLabel, "_TestDesc")
$TestButton = GUICtrlCreateButton("TEST", 10, 160, 50, 20)

GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

GUISetState()
While 1
    Sleep(10)
WEnd

Func _TestDesc()
    For $x = 1 To $a_Test[0]
        If GUICtrlRead($Combo) = $a_Test[$x] Then GUICtrlSetData($DescLabel, $a_Desc[$x])
    Next
EndFunc   ;==>_TestDesc

Func _Exit()
    Exit
EndFunc   ;==>_Exit
enfin bref, surement plein d'erreur, merci d'avance pour votre aide

Re: [...] scintillement quand guictrlsetdata dans while

Posté : ven. 15 févr. 2008 08:06
par moutelous
Bonjour,

Non il fonctionne très bien ce code ... moyennant une petite modif (l'appel de la fonction doit se faire sur appui du bouton TEST :

Code : Tout sélectionner

 
#include<GuiConstants.au3>
Dim $x
Opt("GUIOnEventMode", 1)

$Test = "test1|test2|test3"
$Desc = "test n°1|test n°2|test n°3"

Global Const $a_Test = StringSplit($Test, "|")
Global Const $a_Desc = StringSplit($Desc, "|")

GUICreate("", 200, 200)
$Combo = GUICtrlCreateCombo("Choix du test…", 10, 10, 180, 20)
GUICtrlSetData(-1, $Test, "Choix du test…")
GUICtrlCreateLabel("Description :", 10, 50)
$DescLabel = GUICtrlCreateLabel("", 10, 70, 180, 75)
;GUICtrlSetOnEvent(GUICtrlSetData($DescLabel, $a_Desc[$x]), "_TestDesc")
;GUICtrlSetOnEvent($DescLabel, "_TestDesc")
$TestButton = GUICtrlCreateButton("TEST", 10, 160, 50, 20)
GUICtrlSetOnEvent($TestButton,"_TestDesc")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

GUISetState()
While 1
    Sleep(10)
WEnd

Func _TestDesc()
    For $x = 1 To $a_Test[0]
        If GUICtrlRead($Combo) = $a_Test[$x] Then GUICtrlSetData($DescLabel, $a_Desc[$x])
    Next
EndFunc   ;==>_TestDesc

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
A+

Re: [...] scintillement quand guictrlsetdata dans while

Posté : ven. 15 févr. 2008 16:38
par arrkhan
plop,

je me suis peut etre mal exprime, mais je ne veux pas que l'affichage de la description soit lie a l appui sur le button TEST, mais plutot au choix fait dans la combobox, et c'est bon j'ai trouvé comment faire (je devais etre fatigue hier), en fait je tentai de faire

Code : Tout sélectionner

GUICtrlSetOnEvent($DescLabel, "_TestDesc")
alors qu'il fallait en fait

Code : Tout sélectionner

GUICtrlSetOnEvent($Combo, "_TestDesc")
l'appui sur le bouton devant en fait juste lancer le test correspondant a la combobox et c'est la prochaine etape.... avec encore un troisieme tableau pour les evenement :'(, (je me complique la tache)

Edit: voici ce que ca donne pour l instant:

Code : Tout sélectionner

#include<GuiConstants.au3>
Opt("GUIOnEventMode", 1)

$Test = "Choix du test…|test1|test2|test3"
$Desc = "Description Choix du test|test n°1|test n°2|test n°3"

Global Const $a_Test = StringSplit($Test, "|")
Global Const $a_Desc = StringSplit($Desc, "|")

GUICreate("", 200, 200)
$Combo = GUICtrlCreateCombo("", 10, 10, 180, 20)
GUICtrlSetOnEvent($Combo, "_TestDesc")
GUICtrlSetData($Combo, $Test, $a_Test[1])
GUICtrlCreateLabel("Description :", 10, 50)
$DescLabel = GUICtrlCreateLabel($a_Desc[1], 10, 70, 180, 75)
$TestButton = GUICtrlCreateButton("TEST", 10, 160, 50, 20)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

GUISetState()
While 1
    Sleep(10)
WEnd

Func _TestDesc()
    For $x = 1 To $a_Test[0]
        If GUICtrlRead($Combo) = $a_Test[$x] Then GUICtrlSetData($DescLabel, $a_Desc[$x])
    Next
EndFunc   ;==>_TestDesc

Func _Exit()
    Exit
EndFunc   ;==>_Exit
la ca marche exactement comme je le veux et avec un code relativement propre en plus je trouve, bon je m attaque au 3e tableau

je met [R] parce que bon, y a plus de scintillement ^^