Page 1 sur 1

Mettre une Fonction en paramètre dans une autre fonction

Posté : ven. 27 mai 2016 03:31
par Numeric
Salut à tous,

j'ai un souci :
- je voudrais mettre une fonction en paramètre dans une autre fonction: ceci n'est pas un problème.
-Le problème c'est:
1) appeler la fonction mise en paramètre à l'aide d'un contrôle crée pour ce fait.
2) Mais la fonction mise en paramètre est automatiquement exécutée quand la fonction principale est appelée.
voici un exemple :

Code : Tout sélectionner

#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>

FonctionUtilisateur(Msg_USER('Salut à vous !')); Appel de la fonction principale avec comme paramètre la fonction à appeler

; #FUNCTION# ====================================================================================================================
; Name ..........: FonctionUtilisateur
; Description ...: Fonction Principale ayant pour rôle d'appeler la fonction secondaire mise en paramètre
; Syntax ........: FonctionUtilisateur($USER_Func)
; Parameters ....: $USER_Func           - an unknown value.
; ===============================================================================================================================
Func FonctionUtilisateur($USER_Func)

If Not IsFunc($USER_Func) Then Return SetError(1,1,'')

Local $hGUI = GUICreate("User Func")

Local $button = GUICtrlCreateButton("Start Func",122,25)

GUISetState( )

While 1
	$sMsg = GUIGetMsg()
	Switch $sMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $button
			Local $Execute_User_Func = $USER_Func; Le boutton est censé appeller la fonction en paramètre
	EndSwitch
WEnd

EndFunc ;=====> FonctionUtilisateur($USER_Func)



; #FUNCTION# ====================================================================================================================
; Name ..........: Msg_USER
; Description ...: Fonction servant d'exemple : à mettre en paramètre dans une autre fonction
; Syntax ........: Msg_USER($iMsg)
; Parameters ....: $iMsg                - an integer value.
; ===============================================================================================================================
Func Msg_USER($iMsg)
	MsgBox($MB_SYSTEMMODAL,'',$iMsg                )
EndFunc ;====> Msg_USER($iMsg)




Re: Mettre une Fonction en paramètre dans une autre fonction  

Posté : ven. 27 mai 2016 07:50
par jchd
Il y a grosso modo deux façons de réaliser ça : l'une propre et ... plein d'autres pas propres sur lesquelles je ne m'étendrai pas.
FonctionUtilisateur(Msg_USER('Salut à vous !'))
Quand tu exécutes ça, tu exécutes ce qui est en gras, donc ça revient à passer en argument à la fonction FonctionUtilisateur le code de retour de Msg_USER('Salut à vous !'). La ligne
If Not IsFunc($USER_Func) Then Return SetError(1,1,'')
provoque donc une erreur (le paramètre n'est pas une fonction.

Une variable AutoIt peut être une fonction et ça nous arrange bien dans ton cas. La façon propre de faire devient ainsis :

Code : Tout sélectionner

#include <MsgBoxConstants.au3>
#include <GUIConstantsEx.au3>

; Appel de la fonction principale avec comme paramètres :
;	la fonction à appeler
;	ses éventuels paramètres
FonctionUtilisateur(Msg_USER, 'Salut à vous !')

; #FUNCTION# ====================================================================================================================
; Name ..........: FonctionUtilisateur
; Description ...: Fonction Principale ayant pour rôle d'appeler la fonction secondaire mise en paramètre
; Syntax ........: FonctionUtilisateur($USER_Func)
; Parameters ....: $USER_Func           - an unknown value.
; ===============================================================================================================================
Func FonctionUtilisateur($USER_Func, $param)

If Not IsFunc($USER_Func) Then Return SetError(1,1,'')

Local $hGUI = GUICreate("User Func")

Local $button = GUICtrlCreateButton("Start Func",122,25)

GUISetState( )

While 1
   $sMsg = GUIGetMsg()
   Switch $sMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $button
         Local $Execute_User_Func = $USER_Func($param); Le boutton est censé appeller la fonction en paramètre
   EndSwitch
WEnd

EndFunc ;=====> FonctionUtilisateur($USER_Func)

; #FUNCTION# ====================================================================================================================
; Name ..........: Msg_USER
; Description ...: Fonction servant d'exemple : à mettre en paramètre dans une autre fonction
; Syntax ........: Msg_USER($iMsg)
; Parameters ....: $iMsg                - an integer value. <--------- ???
; ===============================================================================================================================
Func Msg_USER($iMsg)
   MsgBox($MB_SYSTEMMODAL,'',$iMsg)
EndFunc ;====> Msg_USER($iMsg)

Re: Mettre une Fonction en paramètre dans une autre fonction

Posté : ven. 27 mai 2016 08:12
par Numeric
jchd , Ta réponse me donne des éclaircissements cependant un problème persiste : l'objectif ici est d'appeler la fonction en paramètre grâce au contrôle.

Re: Mettre une Fonction en paramètre dans une autre fonction

Posté : ven. 27 mai 2016 09:21
par jchd
C'est justement ce que fait mon code.