Page 1 sur 1

[R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 15:59
par protecta
Bonjour, je suis débutant sur autoit, j'ai commencé les GUI hier.
Je me suis lancé un petit défi, faire deux pianos, un dit "débutant" avec seulement 9 notes (beep), et l'autre "expert" avec 28 notes.

Mon problème, c'est que je voudrais faire comme un système d'onglet, par exemple onglet 1 : piano débutant, onglet 2 : piano expert. La seule solution que j'ai trouvé, c'est de faire une fenêtre principale avec deux boutons, chacun menant à un piano différent. Niveau code, c'est vraiment le bazar, mais ça fonctionne. Concrètement, je voudrais faire un code moins bordélique et plus clair, car mes Case à la volée, c'est tiré par les cheveux.
Voici le code :
► Afficher le texte
Je suis conscient qu'il peut y avoir des incohérences dans mon code, et pour ce qui est de la recherche, je n'ai pas trouvé de résultat concret un mon problème. Par avance, merci de votre aide.

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 16:32
par bloodwolff
Voilà
Tu crée une TabSheet de la même dimension que ta Gui regarde mon exemple pour comprendre comment les créé c'est vraiment simple
le
Si tu veux rajouter ou modifier les control sur une feuille tu lance
GUISwitch($Form1,$TabSheet1)
et tu relance un
GUISwitch($Form1)
une fois les modifications terminé

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 619, 438, 192, 124)
$Tab1 = GUICtrlCreateTab(0, 0, 619, 438)
$TabSheet1 = GUICtrlCreateTabItem("Piano débutant")
$Label1 = GUICtrlCreateLabel("débutant", 184, 176, 50, 17)
$TabSheet2 = GUICtrlCreateTabItem("Piano expert")
$Label2 = GUICtrlCreateLabel("expert", 184, 176, 36, 17)
GUICtrlSetState(-1,$GUI_SHOW)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)


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

    EndSwitch
WEnd

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 16:50
par protecta
Ok je vois à peu près, mais deux questions :

-Il y a un cadre blanc qui "mange" un peu mon image de fond en haut à gauche, et dans GUICtrlCreateTabItem y a pas de dimensions à définir, on peut pas le retirer ?

-Où dois-je placer GUISwitch($Form1,$TabSheet1) et GUISwitch($Form1) ? Dans la boucle ?

Mon code donne ça pour le moment :
► Afficher le texte
Après, je ne vois pas comment mettre le reste, pourrais-tu me donner un exemple, avec deux msgbox ayant un message différent par feuille ?

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 16:57
par bloodwolff
Les GUISwitch($Form1,$TabSheet1) et GUISwitch($Form1) ne sont pas obligatoire et pas nécessaire je pense pour votre script c'était seulement pour vous les montrer pour vos scripts ultérieurs , ils servent à modifier les objets dans les onglets comme changer un image par exemple car sans les utiliser les modifications seront appliqué à la gui et non à l'onglet

Les dimensions des Tab vont à cette ligne ,

Code : Tout sélectionner

$Tab1 = GUICtrlCreateTab(0,0,0,0)
les lignes

Code : Tout sélectionner

$TabSheet1 = GUICtrlCreateTabItem("Piano débutant")
servent seulement à rajouter des onglets

Ps : Merci d'utiliser les balises Spoiler pour les longs codes

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:22
par protecta
Justement, mes deux onglets n'ont pas la même image de fond, des boutons différents, etc... Dans mon premier onglet, j'ai 8 notes donc 8 boutons plus deux autres boutons : une musique automatique, et une aide pour indiquer que les notes peuvent être jouées de F1 à F8.

Dans mon deuxième onglet, j'ai 28 boutons, de taille et disposition différents du premier onglet.

Sinon, merci pour le cadre blanc, il a disparu après modification :

Code : Tout sélectionner

$Tab1 = GUICtrlCreateTab(0,0,158,20)
Et je réitère ma question, comment dois-je organiser le corps de la boucle pour gérer l'ensemble ?
Je dois renommer mes variables ? Car certaines ont des noms identiques . . . Je balance tous les Case à la suite et voilà ... ?

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:23
par bloodwolff
Tu donne un nom différent à chaque bouton (les noms des boutons débutants doivent être différents de ceux d'expert) et tu les places dans une grande boucle qui les regroupent tous

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:24
par Jerome
Coucou,


Pour switch sur des Tab, j'utilise ceci, ici avec des input adressIP, mais vous pouvez adapter selon vos besoins.

Code : Tout sélectionner

Global $iLastTab = 0


$Tab1 = GUICtrlCreateTab(0, 0, 633, 25)
GUICtrlSetOnEvent(-1, "_Tab_Switch")

$TabSheet1 = GUICtrlCreateTabItem("List IP") 

$TabSheet2 = GUICtrlCreateTabItem("Utilitaires") 

Func _Tab_Switch() 
    ; Check which Tab is active
    Local $iCurrTab = GUICtrlRead($Tab1)
    ; If the Tab has changed
    If $iCurrTab <> $iLastTab Then
        ; Show/Hide controls as required
        Switch $iCurrTab
            Case 0
                WinSetState($IPAddress11, "", @SW_SHOW)
                WinSetState($IPAddress22, "", @SW_SHOW)
            Case 1
                WinSetState($IPAddress11, "", @SW_HIDE)
                WinSetState($IPAddress22, "", @SW_HIDE)
        EndSwitch
        $iLastTab = $iCurrTab
    EndIf
EndFunc   ;==>_Tab_Switch




Jérôme

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:25
par pierrotm777
Je pense qu'un truc dans ce genre devrais te plaire :D

Code : Tout sélectionner

[spoiler=]#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

Hotkeyset("{F1}","do1")
Hotkeyset("{F2}","re")
Hotkeyset("{F3}","mi")
Hotkeyset("{F4}","fa")
Hotkeyset("{F5}","sol")
Hotkeyset("{F6}","la")
Hotkeyset("{F7}","si")
Hotkeyset("{F8}","do2")

$Form1 = GUICreate("Piano", 1000,500)
$Tab1 = GUICtrlCreateTab(0,0,990,490)
;__________________________________________________________
$TabSheet1 = GUICtrlCreateTabItem("Piano débutant")
GUICtrlCreatePic("img.jpg",0,0,1000,500,BitOR($WS_GROUP,$WS_CLIPSIBLINGS))
$do_1 = GUICtrlCreateButton("Do",30,70,70,300)
$re_1 = GUICtrlCreateButton("Ré",155,70,70,300)
$mi_1 = GUICtrlCreateButton("Mi",280,70,70,300)
$fa_1 = GUICtrlCreateButton("Fa",405,70,70,300)
$sol_1 = GUICtrlCreateButton("Sol",530,70,70,300)
$la_1 = GUICtrlCreateButton("La",655,70,70,300)
$si_1 = GUICtrlCreateButton("SI",780,70,70,300)
$do2_1 = GUICtrlCreateButton("Do",905,70,70,300)
$aide = Guictrlcreatebutton("Au Clavier",890,450,60,25)
$musique_1 = GUICtrlCreateButton("Musique à part", 740,450,100,25)
;________1___________________________________________________
$TabSheet2 = GUICtrlCreateTabItem("Piano expert")
GUICtrlCreatePic("image.jpg",0,0,1000,500,BitOR($WS_GROUP,$WS_CLIPSIBLINGS))
$do_2 = GUICtrlCreateButton("Do",20,200,30,100)
$re_2 = GUICtrlCreateButton("Ré",55,200,30,100)
$mi_2 = GUICtrlCreateButton("Mi",90,200,30,100)
$fa_2 = GUICtrlCreateButton("Fa",125,200,30,100)
$sol_2 = GUICtrlCreateButton("Sol",160,200,30,100)
$la_2 = GUICtrlCreateButton("La",195,200,30,100)
$si_2 = GUICtrlCreateButton("SI",230,200,30,100)
$do2_2 = GUICtrlCreateButton("Do",265,200,30,100)
$re2_2 = GUICtrlCreateButton("Ré",300,200,30,100)
$mi2_2 = GUICtrlCreateButton("Mi",335,200,30,100)
$fa2_2 = GUICtrlCreateButton("Fa",370,200,30,100)
$sol2_2 = GUICtrlCreateButton("Sol",405,200,30,100)
$la2_2 = GUICtrlCreateButton("La",440,200,30,100)
$si2_2 = GUICtrlCreateButton("SI",475,200,30,100)
$do3_2 = GUICtrlCreateButton("Do",510,200,30,100)
$re3_2 = GUICtrlCreateButton("Ré",545,200,30,100)
$mi3_2 = GUICtrlCreateButton("Mi",580,200,30,100)
$fa3_2 = GUICtrlCreateButton("Fa",615,200,30,100)
$sol3_2 = GUICtrlCreateButton("Sol",650,200,30,100)
$la3_2 = GUICtrlCreateButton("La",685,200,30,100)
$si3_2 = GUICtrlCreateButton("SI",720,200,30,100)
$do4_2 = GUICtrlCreateButton("Do",755,200,30,100)
$re4_2 = GUICtrlCreateButton("Ré",790,200,30,100)
$mi4_2 = GUICtrlCreateButton("Mi",825,200,30,100)
$fa4_2 = GUICtrlCreateButton("Fa",860,200,30,100)
$sol4_2 = GUICtrlCreateButton("Sol",895,200,30,100)
$la4_2 = GUICtrlCreateButton("La",930,200,30,100)
$si4_2 = GUICtrlCreateButton("SI",965,200,30,100)
GUICtrlSetState(-1,$GUI_SHOW)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

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

    EndSwitch
WEnd
#ce

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $do_1
            beep(264,300)
        Case $msg = $re_1
            beep(297,300)
        Case $msg = $mi_1
            beep(330,300)
        Case $msg = $fa_1
            beep(352,300)
        Case $msg = $sol_1
            beep(396,300)
        Case $msg = $la_1
            beep(440,300)
        Case $msg = $si_1
            beep(495,300)
        Case $msg = $do2_1
            beep(523,300)
        Case $msg=$aide
            msgbox(0,"Touches clavier", "Pour jouer au clavier, il y a les touches : " & @crlf & _
            "F1: Do" & @crlf & _
            "F2: Ré"& @crlf & _
            "F3: Mi"& @crlf & _
            "F5: Sol"& @crlf & _
            "F6: La"& @crlf & _
            "F7: Si"& @crlf & _
            "F8: Do")
        Case $msg = $musique_1
            BEEP(480,200)
            BEEP(1568,200)
            BEEP(1568,200)
            BEEP(1568,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(369.99,200)
            BEEP(392,200)
            BEEP(369.99,200)
            BEEP(392,200)
            BEEP(392,400)
            BEEP(196,400)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(83.99,200)
            BEEP(880,200)
            BEEP(830.61,200)
            BEEP(880,200)
            BEEP(987.77,400)
            BEEP(880,200)
            BEEP(783.99,200)
            BEEP(698.46,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(880,200)
            BEEP(830.61,200)
            BEEP(880,200)
            BEEP(987.77,400)
            SLEEP(200)
            BEEP(1108,10)
            BEEP(1174.7,200)
            BEEP(1480,10)
            BEEP(1568,200)
            SLEEP(200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(783.99,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(880,200)
            BEEP(830.61,200)
            BEEP(880,200)
            BEEP(987.77,400)
            BEEP(880,200)
            BEEP(783.99,200)
            BEEP(698.46,200)
            BEEP(659.25,200)
            BEEP(698.46,200)
            BEEP(784,200)
            BEEP(880,400)
            BEEP(784,200)
            BEEP(698.46,200)
            BEEP(659.25,200)
            BEEP(587.33,200)
            BEEP(659.25,200)
            BEEP(698.46,200)
            BEEP(784,400)
            BEEP(698.46,200)
            BEEP(659.25,200)
            BEEP(587.33,200)
            BEEP(523.25,200)
            BEEP(587.33,200)
            BEEP(659.25,200)
            BEEP(698.46,400)
            BEEP(659.25,200)
            BEEP(587.33,200)
            BEEP(493.88,200)
            BEEP(523.25,200)
            SLEEP(400)
            BEEP(349.23,400)
            BEEP(392,200)
            BEEP(329.63,200)
            BEEP(523.25,200)
            BEEP(493.88,200)
            BEEP(466.16,200)
            BEEP(440,200)
            BEEP(493.88,200)
            BEEP(523.25,200)
            BEEP(880,200)
            BEEP(493.88,200)
            BEEP(880,200)
            BEEP(1760,200)
            BEEP(440,200)
            BEEP(392,200)
            BEEP(440,200)
            BEEP(493.88,200)
            BEEP(783.99,200)
            BEEP(440,200)
            BEEP(783.99,200)
            BEEP(1568,200)
            BEEP(392,200)
            BEEP(349.23,200)
            BEEP(392,200)
            BEEP(440,200)
            BEEP(698.46,200)
            BEEP(415.2,200)
            BEEP(698.46,200)
            BEEP(1396.92,200)
            BEEP(349.23,200)
            BEEP(329.63,200)
            BEEP(311.13,200)
            BEEP(329.63,200)
            BEEP(659.25,200)
            BEEP(698.46,400)
            BEEP(783.99,400)
            BEEP(440,200)
            BEEP(493.88,200)
            BEEP(523.25,200)
            BEEP(880,200)
            BEEP(493.88,200)
            BEEP(880,200)
            BEEP(1760,200)
            BEEP(440,200)
            BEEP(392,200)
            BEEP(440,200)
            BEEP(493.88,200)
            BEEP(783.99,200)
            BEEP(440,200)
            BEEP(783.99,200)
            BEEP(1568,200)
            BEEP(392,200)
            BEEP(349.23,200)
            BEEP(392,200)
            BEEP(440,0)
            BEEP(698.46,200)
            BEEP(659.25,200)
            BEEP(698.46,200)
            BEEP(739.99,200)
            BEEP(783.99,200)
            BEEP(392,200)
            BEEP(392,200)
            BEEP(392,200)
            BEEP(392,200)
            BEEP(196,200)
            BEEP(196,200)
            BEEP(196,200)
            BEEP(185,200)
            BEEP(196,200)
            BEEP(185,200)
            BEEP(196,200)
            BEEP(207.65,200)
            BEEP(220,200)
            BEEP(233.08,200)
            BEEP(246.94,200)


        Case $msg = $do_2
            beep(264,300)
        Case $msg = $re_2
            beep(297,300)
        Case $msg = $mi_2
            beep(330,300)
        Case $msg = $fa_2
            beep(352,300)
        Case $msg = $sol_2
            beep(396,300)
        Case $msg = $la_2
            beep(440,300)
        Case $msg = $si_2
            beep(495,300)
        Case $msg = $do2_2
            beep(523,300)
        Case $msg = $re2_2
            beep(587,300)
        Case $msg = $mi2_2
            beep(659,300)
        Case $msg = $fa2_2
            beep(698,300)
        Case $msg = $sol2_2
            beep(784,300)
        Case $msg = $la2_2
            beep(880,300)
        Case $msg = $si2_2
            beep(988,300)
        Case $msg = $do3_2
            beep(1046,300)
        Case $msg = $re3_2
            beep(1175,300)
        Case $msg = $mi3_2
            beep(1318,300)
        Case $msg = $fa3_2
            beep(1397,300)
        Case $msg = $sol3_2
            beep(1568,300)
        Case $msg = $la3_2
            beep(1760,300)
        Case $msg = $si3_2
            beep(1975,300)
        Case $msg = $do4_2
            beep(2093,300)
        Case $msg = $re4_2
            beep(2349,300)
        Case $msg = $mi4_2
            beep(2637,300)
        Case $msg = $fa4_2
            beep(2794,300)
        Case $msg = $sol4_2
            beep(3136,300)
        Case $msg = $la4_2
            beep(3520,300)
        Case $msg = $si4_2
            beep(3951,300)
    EndSelect
WEnd

Func do1()
    Beep(264, 200)
EndFunc   ;==>F1
Func re()
    Beep(297, 200)
EndFunc   ;==>F2
Func mi()
    Beep(330, 200)
EndFunc   ;==>F3
Func fa()
    Beep(352, 200)
EndFunc   ;==>F4
Func sol()
    Beep(396, 200)
EndFunc   ;==>F5
Func la()
    Beep(440, 200)
EndFunc   ;==>F6
Func si()
    Beep(495, 200)
EndFunc   ;==>F7
Func do2()
    Beep(523.3, 200)
EndFunc   ;==>F8
[/spoiler]

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:28
par bloodwolff
Cela fais plus beau avec les meme dimensions ;)

Code : Tout sélectionner

$Form1 = GUICreate("Piano", 1000,500)
$Tab1 = GUICtrlCreateTab(0,0,1000,500)
même un peu plus grand peut être mieux

Re: [..] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:40
par protecta
Merci beaucoup pour votre aide, surtout à pierrotm777 qui a dû se casser la tête à tout renommer . . .
Donc j'ai modifié deux trois trucs du code de pierrotm777 car mes images de fond n'étaient pas visible =). Voici le code final :
► Afficher le texte
Problème résolu !

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 17:58
par pierrotm777
Pour une fois qu'un code est à ma portée.
Tu devrais donner le fichier img.jpg afin que l'on puisse voir ce que cela donne :D

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 18:06
par bloodwolff
Juste comme sa , la fonctions beep ne fonctionne pas chez moi (J'ai seven)

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 18:43
par protecta
Pour les beeps, je crois qu'il y a un rapport avec le lancement en tant qu'admin . . .
Voilà le zip avec l'exe et les deux images :

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 19:09
par bloodwolff
Non même en admin cela ne fonctionne pas , et sinon la fonction au clavier fais bugger la gui :(

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 19:20
par protecta
Et bien ça fonctionne chez moi . . . Bizarre :shock:

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 19:29
par bloodwolff
Je vais aller vérifier le résultat sur mon XP alors :P

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 20:07
par pierrotm777
Viens de tester sur Vista , c'est ok aussi pour moi de même sur Xp sp3

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 20:14
par bloodwolff
C'est bon pour le bouton je sais pas ce que j'avais fais de travers tantôt ...
Mais pour les beep ça ne marche toujours pas mais bon ça ne vient pas de ton script car la commande beep n'a jamais fonctionné sur cet ordinateur ...

Re: [R] Plusieurs "onglets" dans un script

Posté : sam. 27 nov. 2010 23:29
par Jerome
Il me semble que la réponse se trouve dans ton BIOS, un truc a activer ou je sait plus quoi.



Jérôme