Mettre une Fonction en paramètre dans une autre fonction

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 131
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

Mettre une Fonction en paramètre dans une autre fonction

#1

Message 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)



De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2273
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#2

Message 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)
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 131
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

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

#3

Message 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.
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2273
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#4

Message par jchd »

C'est justement ce que fait mon code.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre