Page 1 sur 1

combiner les switch ?

Posté : lun. 15 mai 2017 23:13
par IsLaMalice
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 ?

Re: combiner les switch ?

Posté : lun. 15 mai 2017 23:58
par IsLaMalice
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 ???

Re: combiner les switch ?  

Posté : mar. 16 mai 2017 00:28
par IsLaMalice
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...

Re: combiner les switch ?

Posté : dim. 21 mai 2017 23:03
par Tlem
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