Page 1 sur 1

[..] Groupe de control?

Posté : lun. 29 juin 2009 15:09
par ethneldryt
Bonjour, une fonction existe pour faire un groupe de control?
par exemple j'ai 3 bouton, un label,un edit,...
ensuite en fesant un controlhide pour cacher ce groupe. merci

Re: [..] Groupe de control?

Posté : lun. 29 juin 2009 18:12
par guitarist
Je ne trouve pas sa extremement clair ce que tu VEUX C'est qu'ils affiche tes trois contrôles ou non pour sa avec If ou Case sa suffit avec sa tu met GuiCtrl... et voilà
Si j'ai bien compris sa devrai être sa.

Re: [..] Groupe de control?

Posté : lun. 29 juin 2009 21:28
par Tlem
Je ne me souviens pas avoir vu ce genre de fonction dans AutoIt.

Le mieux sera sans doute de mettre ce groupe de contrôle dans une fonction, qui gérera l'affichage ou non.

Re: [..] Groupe de control?

Posté : mar. 30 juin 2009 10:12
par L4crymal
Et voila pour toi un belle exemple fait en 30 minutes:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
GUICreate("test", 500, 500)
GUISetState()
$ca = GUICtrlCreateButton("Cacher", 100, 100)
$mo = GUICtrlCreateButton("Montrer", 300, 100)

$check = GUICtrlCreateCheckbox("Check !", 300, 300)
$lab = GUICtrlCreateLabel("LABEL !!!!", 400, 400)
$radio = GUICtrlCreateRadio("RADIO ?!?", 100, 400)
$input = GUICtrlCreateInput("Hein ? P**e ??? ^^", 200, 200)
$Group1 = GUICtrlGroup($check & "/" & $lab & "/" & $radio & "/" & $input)         ; La fonction GUICtrlGroup() ne prend que 1 paramètre : les différents CTRL à regrouper, séparés du symbole "/" pour les différentier
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $ca
            GUICtrlGroupSetState($Group1, $GUI_HIDE) ; Fonction qui va cacher le groupe 1
        Case $mo
            GUICtrlGroupSetState($Group1, $GUI_SHOW) ; Fonction qui va montrer le groupe 1

    EndSwitch

WEnd










Func GUICtrlGroup($sCtrl)              ; Fonction 1 qui consiste à regrouper les CTRL
    $sSplit = StringSplit($sCtrl, "/")                  ; La fonction découpe le paramètre par rapport au symbole "/"

    $sReturn = $sSplit[0] & "." & $sCtrl            ; Puis attribue le nombre de CTRL dans le GROUPE
    Return $sReturn                                        ; Et retourne le résultat ( soit le GROUPE )
EndFunc   ;==>GUICtrlGroup

Func GUICtrlGroupSetState($sGUICtrlGroup, $sState) ; Fonction 2 qui consiste à changer l'état d'un GROUPE
    $sSplit2 = StringSplit($sGUICtrlGroup, ".")               ; Elle récupère le nombre de CTRL
    $DiffCtrl = StringSplit($sSplit2[2], "/")                    ; Divise le GROUPE affin de récupéré tous les CTRL
    For $i = 1 To $sSplit2[1]                                      ; Une boucle va se répéter le nombre de fois = au nombre de CTRL affin de tous les modifier 1 par 1 ( très rapidement et instantané à nos yeux )
        GUICtrlSetState($DiffCtrl[$i], $sState)             ; Et HOP !
    Next
EndFunc   ;==>GUICtrlGroupSetState

Posté : mar. 30 juin 2009 19:58
par jl56
Bonjour L4crymal

Effectivement c'est très fonctionnel

je ne comprend pas tous ( manque peut être un peu de commentaires )
je le garde en exemple

Merci et Bravo

A+ JL56

Re: [..] Groupe de control?

Posté : mar. 30 juin 2009 22:42
par L4crymal
Ya pas de quoi ça me fait plaisir vu que c'est un très bel exemple qui va me servir aussi ( entre autre pour faire plusieurs systèmes d'onglets )


Bref le principe est Simple ( j'ai mis les commentaires ) :

Quand tu fait:

Code : Tout sélectionner

$MaVariable=GUICtrlCreatemachintrucmuche()
Cela va donner un identifiant au contrôle dans $MaVariable ( par exemple 5 )

C'est grâce à cet identifiant que les autre fonction agisse, par exemple quand tu fait GuiSetState($MaVariable, $GUI_HIDE)

Autoit va comprendre qu'il faut cacher le contrôle $Mavariable ( donc l'identifiant 5 )

Voila pour conclure cette partie les fonctions qui agissent sur les Contrôles utilisent des nombres pour repérer les différents Contrôles.


La deuxième partie s'intéresse à ma fonction, comment elle fonctionne?

Et bien c'est aussi simple ^^ :

Elle prend les identifiant de tous les contrôles à regrouper en paramètre, les sépare par de "/" puis quand vient le temps de les modifier tous en un coup, une autre fonction prend en paramètre le groupe et ferme 1 à 1 les contrôles en passant d'identifiant en identifiant grâce au séparateur "/"

VOILAAAAAAAAAAAAAAAA

Re: [..] Groupe de control?

Posté : mer. 01 juil. 2009 15:55
par Tlem
Il y a bien une solution existante.
Il s'agit d'utiliser GUICtrlCreateGroup d'une manière bien spécifique.

Voici un exemple trouvé sur le forum Anglais :

Code : Tout sélectionner

#include <GUIConstants.au3>

GUICreate('test',430,160)
Global $g1s=GUICtrlCreateGroup('Test group - check/uncheck',10,10,200,100)
Global $c11=GUICtrlCreateCheckbox('11111',20,30)
Global $c12=GUICtrlCreateCheckbox('22222',20,50)
Global $c13=GUICtrlCreateCheckbox('33333',20,70)
Global $r1=GUICtrlCreateRadio('test',100,50,60)
Global $g1e=GUICtrlCreateGroup("", -99, -99, 1, 1) ;added
Global $b1Off=GUICtrlCreateButton('off',40,120,60)
Global $b1On=GUICtrlCreateButton('on',120,120,60)

Global $g2s=GUICtrlCreateGroup('Test group - enable/disable',220,10,200,100)
Global $c21=GUICtrlCreateCheckbox('11111',230,30)
Global $c22=GUICtrlCreateCheckbox('22222',230,50)
Global $c23=GUICtrlCreateCheckbox('33333',230,70)
Global $b2=GUICtrlCreateButton('test',310,50,60)
Global $g2e=GUICtrlCreateGroup("", -99, -99, 1, 1) ;added
Global $b2Off=GUICtrlCreateButton('off',250,120,60)
Global $b2On=GUICtrlCreateButton('on',330,120,60)
GUISetState()

While 1
    Sleep(20)
    Switch GUIGetMsg()
        Case $b1Off
            _GUICtrlGroup_SetState($GUI_UNCHECKED,$g1s,$g1e)
        Case $b1On
            _GUICtrlGroup_SetState($GUI_CHECKED,$g1s,$g1e)
        Case $b2Off
            _GUICtrlGroup_SetState($GUI_DISABLE,$g2s,$g2e)
        Case $b2On
            _GUICtrlGroup_SetState($GUI_ENABLE,$g2s,$g2e)
        Case -3
            Exit
    EndSwitch
WEnd

Func _GUICtrlGroup_SetState($iState, $iFrom, $iTo)
    For $i = $iFrom To $iTo
        GUICtrlSetState($i, $iState)
    Next
EndFunc