Page 1 sur 1
[R] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 13:22
par Arkenix
Bonjour à tous.
Je suis entrain de développer un menu bouton dynamique.
J'arrive a créer donc mes jolie boutons grâce à plusieurs Arrays etc.
Bref le souci n'es pas là.
Je me retrouve dans la parti du "Switch", ou je souhaite donc réaliser un iniWrite, en fonction du bouton pressé.
Je crois que je suis parti un peu trop loin, et je me suis mis à faire des Do dans des Do avec du switch/select (je ne comprend pas tellement la différence).
Voici donc mon "bidouillage" pour cette parti :
Code : Tout sélectionner
Do
$Slot = 0
Do
Switch GUIGetMsg()
Case $SlotArray[$Slot]
MsgBox(0,"","click")
IniWrite(".\Save\Var.ini","Variables",$PCSArrayMenu[1],$Slot)
$ExitLoop = 1
EndSwitch
$Slot +=1
Until $Slot = $PCSMenuCount-3
Until $ExitLoop = 1
Seul souci c'est que ça ne réagit pas du tout.
Je pense que je me suis complètement paumé dans mon code, une petite aide ?
(un regard neuf est parfois plus efficace

)
Merci pour vos aides chères amis !
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 14:00
par mikell
Rien compris à ce que tu essaies de faire

Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 14:54
par Arkenix
^^ il n'y a pas que toi j'ai l'impression
Bon en clair j' essais d'effectuer une action lors ce qu'ont clic sur un bouton.
Sauf que celui ci est dynamique, et il est déclaré dans un Array.
Code : Tout sélectionner
For $m = 2 To $PCSMenuCount-1 step 1
$MenuSlot += 25
$SlotArray[$Slot] = GUICtrlCreateButton($PCSArrayMenu[$m],0,$HUDPosY+$MenuSlot,@DesktopWidth,25)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetColor(-1,0xffffff)
$Slot += 1
Next
Ainsi je ne sais pas comment faire un switch / endswitch, avec des "case Array[nombre]"
1 - J'ai donc fait Do principal, qui attend que $ExitLoop soit à 1.
2 - A l'intérieur de se Do, il y a donc un autre Do, qui lui à mon fameux "Case Array[Chiffre]", lui même dans un switch.
Ce Do quand à lui attend que l'Array soit fini, et on recommence l'action a zero.
En clair, J'ai des boutons qui ont pour déclaration un Array.
J'aimerais donc vérifier si on clic sur tel ou tel bouton.
► Afficher le texteFunc complet
Code : Tout sélectionner
Func PCS_menu($PCSArrayMenu) ;PCSArrayMenu = [/menu ; #Var ; Bouton1 ; Bouton2 etc]
$PCSMenuCount = UBound($PCSArrayMenu)
Local $SlotArray[$PCSMenuCount-2]
Local $Slot = 0
Local $MenuSlot = 0
Local $ExitLoop = 0
GUICtrlSetData($PCSMainLabel,"")
For $m = 2 To $PCSMenuCount-1 step 1
$MenuSlot += 25
$SlotArray[$Slot] = GUICtrlCreateButton($PCSArrayMenu[$m],0,$HUDPosY+$MenuSlot,@DesktopWidth,25)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetColor(-1,0xffffff)
$Slot += 1
Next
Do
$Slot = 0
Do
Switch GUIGetMsg()
Case $SlotArray[$Slot]
MsgBox(0,"","click")
IniWrite(".\Save\Var.ini","Variables",$PCSArrayMenu[1],$Slot)
$ExitLoop = 1
EndSwitch
$Slot +=1
Until $Slot = $PCSMenuCount-3
Until $ExitLoop = 1
$Slot = 0
For $m = 2 To $PCSMenuCount-1 step 1
GUICtrlDelete($SlotArray[$Slot])
$Slot += 1
Next
EndFunc
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 16:11
par mikell
Hum
► Afficher le texte
Code : Tout sélectionner
$msg = GuiGetMsg
For $slot = 0 to $PCSMenuCount-3
Switch $msg
Case $SlotArray[$slot]
MsgBox(0,"","click")
; ....
EndSwitch
Next
Mais pour ce que tu veux faire ça serait mieux en OnEvent
► Afficher le texte
Code : Tout sélectionner
GUICtrlSetOnEvent(-1, "_BtnClicked") ; à mettre sur tous les boutons créés
Func _BtnClicked()
For $slot = 0 to $PCSMenuCount-3
If @GUI_CtrlId = $SlotArray[$Slot] Then
MsgBox(0,"","click")
; ....
EndIf
Next
EndFunc
ou en GUIRegisterMsg (pas sûr de ce code...)
► Afficher le texte
Code : Tout sélectionner
GUIRegisterMsg($WM_COMMAND, "_BtnClicked")
Func _BtnClicked($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg, $lParam
Switch BitShift($wParam, 16)
Case 0 ; clic
For $slot = 0 to $PCSMenuCount-3
If BitAND($wParam, 0x0000FFFF) = $SlotArray[$slot] Then
MsgBox(0,"","click")
; ....
EndIf
Next
EndSwitch
Return 'GUI_RUNDEFMSG'
EndFunc
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 16:13
par floriansia
Hum...Et si tu recommencait tout?Tu verra peut-être le probleme...
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 17:08
par Arkenix
Merci mikell pour tes réponses, je test ça de suite, et je te tien au courant.
Merci floriansia pour ce bel exemple de réponse dépourvu d’intérêt, peu constructif.
Nous tacherons de répondre la même chose quand vous exposerez vos problèmes
Edit : mikell, visiblement il n'aime pas énormément le @GUI_CtrlId. (erreur de macro).
J'ai supposé qu'il nous fallait un Opt("GUIOnEventMode", 1).
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 17:16
par mikell
Arkenix a écrit :J'ai supposé qu'il nous fallait un Opt("GUIOnEventMode", 1)
Ben oui
Mais ça t'oblige à monter tout le script en mode évènementiel (on peut faire autrement, mais c'est plus délicat à gérer)
@floriansia
L'usage sur ce forum est d'exposer quelques arguments précis et sérieux pour étayer sa réponse

Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 17:20
par Arkenix
Oui donc non je vais faire avec le For je pense.

Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 17:23
par mikell
Si le code n°1 de ma réponse fonctionne, pourquoi s'emmerder la vie ?
( mais c'est quand même mieux le onevent.... )
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 17:30
par Arkenix
Alors j'ai trouvé ma solution.
Ton code n°1 je l'avais déjà fait a vrai dire mais ça ne marchait pas.
Enfaite l’erreur est comment dire... humaine (et oui ah ah).
Il s'agit simplement d'un label situé en dessous/au dessus qui empêchait les clics.
Donc un simple
Et la solution était toute trouvée

Merci en tout cas pour ta réactivité mikell, comme quoi parfois les fautes d'inattentions sont les plus courantes

Bonne journée à tous

[R]
Re: [..] Do Do Switch ça peux s'entendre ?
Posté : sam. 07 juil. 2012 18:20
par mikell
Arkenix a écrit :Enfaite l’erreur est comment dire... humaine (et oui ah ah).
