combiner les switch ?

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
IsLaMalice
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 03 avr. 2017 22:31
Status : Hors ligne

combiner les switch ?

#1

Message par IsLaMalice » lun. 15 mai 2017 22:13

Bonjour,

J'arrive a m'en sortir avec GUIGetMsg() qui me permet d'utiliser les $button de Koda

Code : Tout sélectionner

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3				;Global Const $GUI_EVENT_CLOSE = -3
			Quitter()
		Case $Button1
			Lancer_fonction1()
		Case $Button2
			Lancer_fonction2()
		Case $Button3
			$projet = Inputbox("Choix projet", "Entrez le nom du projet", "toto")
			Switch $projet
				Case "toto"
					$filtre = "112564"
				Case "titi"
					$filtre = "113144"
			EndSwitch
			GUICtrlSetData ($Button3, "Projet : " & $projet)
	EndSwitch
WEnd

J'ai rajouté au prélable (péniblement) une toolbar,

Code : Tout sélectionner

Local Enum $ico_pgup = 1000, $ico_orange, $ico_ctrlA, $ico_escargot, $ico_detail
$Form1 = GUICreate("POC", 140, 488, 358, 295)
$ToolBar1 = _GUICtrlToolbar_Create($Form1)
_GUICtrlToolbar_LoadBitmap($ToolBar1, @ScriptDir & "\icones\WindowsMail.bmp")
_GUICtrlToolbar_LoadBitmap($ToolBar1, @ScriptDir & "\icones\WindowsMovieMaker.bmp")
_GUICtrlToolbar_LoadBitmap($ToolBar1, @ScriptDir & "\icones\WindowsOutlookExpress.bmp")
_GUICtrlToolbar_LoadBitmap($ToolBar1, @ScriptDir & "\icones\WindowsPhotoGallery.bmp")
;~ _GUICtrlToolbar_LoadBitmap($ToolBar1, @ScriptDir & "\icones\escargot.ico")

_GUICtrlToolbar_AddButton($ToolBar1, $ico_pgup, 0)
_GUICtrlToolbar_AddButton($ToolBar1, $ico_orange, 1)
_GUICtrlToolbar_AddButton($ToolBar1, $ico_ctrlA, 2)
_GUICtrlToolbar_AddButton($ToolBar1, $ico_escargot, 3)               ;   <----- ici
_GUICtrlToolbar_AddButtonSep($ToolBar1)
_GUICtrlToolbar_AddButton($ToolBar1, $ico_detail, 4)
Comment lancer la fonction losque l'on clique sur une icone ?

Si je rajoute cela au Switch $nMsg ci dessus : il ne se passe rien

Code : Tout sélectionner

		Case $ToolBar1		;$ico_escargot
			$i=InputBox("?","Rentrez un coefficent lenteur","1")
			$coef_lenteur_machine=number($i)
Faut il alors un autre Switch ?
Comme par exemple, l'aide de _GUICtrlToolbar_Create :

Code : Tout sélectionner

; WM_NOTIFY event handler
Func _WM_NOTIFY($hWndGUI, $iMsgID, $wParam, $lParam)
    #forceref $hWndGUI, $iMsgID, $wParam
    Local $tNMHDR, $hWndFrom, $iCode, $iNew, $iFlags, $iOld
    Local $tNMTBHOTITEM
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $g_hToolbar
            Switch $iCode
                Case $NM_LDOWN
                    ;----------------------------------------------------------------------------------------------
                    MemoWrite("$NM_LDOWN: Clicked Item: " & $g_iItem & " at index: " & _GUICtrlToolbar_CommandToIndex($g_hToolbar, $g_iItem))
                    ;----------------------------------------------------------------------------------------------
                Case $TBN_HOTITEMCHANGE
                    $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam)
                    $iOld = DllStructGetData($tNMTBHOTITEM, "idOld")
                    $iNew = DllStructGetData($tNMTBHOTITEM, "idNew")
                    $g_iItem = $iNew
                    $iFlags = DllStructGetData($tNMTBHOTITEM, "dwFlags")
                    If BitAND($iFlags, $HICF_LEAVING) = $HICF_LEAVING Then
                        MemoWrite("$HICF_LEAVING: " & $iOld)
                    Else
                        Switch $iNew
                            Case $e_idNew
                                ;----------------------------------------------------------------------------------------------
                                MemoWrite("$TBN_HOTITEMCHANGE: $e_idNew")
                                ;----------------------------------------------------------------------------------------------
                            Case $e_idOpen
                                ;----------------------------------------------------------------------------------------------
                                MemoWrite("$TBN_HOTITEMCHANGE: $e_idOpen")
                                ;----------------------------------------------------------------------------------------------
                            Case $e_idSave
                                ;----------------------------------------------------------------------------------------------
                                MemoWrite("$TBN_HOTITEMCHANGE: $e_idSave")
                                ;----------------------------------------------------------------------------------------------
                            Case $e_idHelp
                                ;----------------------------------------------------------------------------------------------
                                MemoWrite("$TBN_HOTITEMCHANGE: $idHelp")
                                ;----------------------------------------------------------------------------------------------
                        EndSwitch
                    EndIf
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_NOTIFY
J'avoue que ce script est assez hermetique pour moi...
Comment combiner les switch ?
Il faut juste une fonction a coté ? mais comment est elle appelée ?

IsLaMalice
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 03 avr. 2017 22:31
Status : Hors ligne

Re: combiner les switch ?

#2

Message par IsLaMalice » lun. 15 mai 2017 22:58

Bon... j'ai l'impression que la solution se trouve vers les "dummy"

Code : Tout sélectionner

; Create GUI
$hGUI = GUICreate("Toolbar", 600, 400)
$id_DummyNew = GUICtrlCreateDummy()
$id_DummyOpen = GUICtrlCreateDummy()
$id_DummySave = GUICtrlCreateDummy()
$id_DummyHelp = GUICtrlCreateDummy()
j'ai pas tout compris encore ce truc... dummy ? mannequin de crash test ???

IsLaMalice
Niveau 4
Niveau 4
Messages : 50
Enregistré le : lun. 03 avr. 2017 22:31
Status : Hors ligne

Re: combiner les switch ?  

#3

Message par IsLaMalice » lun. 15 mai 2017 23:28

bon, a force de persévérer, j'y suis arrivé !!

J'ai fait de la recopie sans comprendre de

Code : Tout sélectionner

; WM_NOTIFY event handler
Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tNMHDR, $hwndFrom, $code, $i_idNew, $dwFlags, $i_idOld
    Local $tNMTBHOTITEM
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hwndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $code = DllStructGetData($tNMHDR, "Code")
    Switch $hwndFrom
        Case $hToolbar
            Switch $code
                Case $NM_CLICK
                    $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam)
                    $iItem = DllStructGetData($tNMTBHOTITEM, "idOld")
                    
                    Switch $iItem
                        Case $id_New
                            GUICtrlSendToDummy($id_DummyNew)
                        Case $id_Open
                            GUICtrlSendToDummy($id_DummyOpen)
                        Case $id_Save
                            GUICtrlSendToDummy($id_DummySave)
                        Case $id_Help
                            GUICtrlSendToDummy($id_DummyHelp)
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_NOTIFY
j'ai mis plus haut un GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

et ca marche !

j'en ai bien sué... pas évident les toolbars...

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11293
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: combiner les switch ?

#4

Message par Tlem » dim. 21 mai 2017 22:03

Bonsoir.

Message 1 : lun. 15 mai 2017 à 22:13
Message 2 : lun. 15 mai 2017 à 22:58
Message 3 : lun. 15 mai 2017 à 23:28

En à peine 1h30, vous avez posé 3 questions d'affilé pour finalement trouver la réponse tout seul.
La prochaine fois, vous devriez d’abord faire vos recherches et quand vous n'avez vraiment aucune solution et que vous arrêtez de chercher, là vous pourrez prendre le temps de poser votre question sur le forum. ^^
Sinon si c'est pour expliquer comment on fait pour tel ou tel truc, vous avez la section des exemples de scripts. :D
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Répondre