Les macros à quoi ça sert?
Publié : jeu. 10/sept./2015 8:11
Ce post fais suite à celui-ci http://www.purebasic.fr/french/viewtopi ... 21&t=15445 ou Micheao n'a pas bien compris.
La différence entre une macro et une procédure?
Alors pourquoi utiliser les macros?
Exemple:
Je vous conseille de placer vos macros dans un fichier commun à tous vos développements.
Exemple de modification de syntaxe.
Code macro
Exemple avec macro
Exemple sans macro
Exemple de tache répétitive:
Prenons un exemple, j'ai pour habitude dans mes fenêtres pour une entrée utilisateur d'utiliser un TextGadget pour le libellé un StringGadget pour l'entrée utilisateur, je personnalise la police j'ajoute une aide au string gadget et je place une procédure CallBack pour vérifier l'entrée utilisateur. (précisons que je fais cette opération sur de nombreux développements)
Code sans macro
Code de la macro
Je pourrais donc à l'avenir appeler ma macro et éviter de taper toutes ces lignes de code, le code sera compilé comme dans la macro
Remarques importantes:
Attention: l'abus nuit en tout, trop de macros ou des macros avec une syntaxe mal adaptée risque de nuire à la lisibilité de votre code.
La différence entre une macro et une procédure?
- Une procédure n'est compilée qu'une seul fois et peu t’être appelée à divers endroits du programme.
- Une macro est compilée à chaque appel
Alors pourquoi utiliser les macros?
- Lorsque vous voulez modifier la syntaxe d'une fonction.
- Lorsque vous voulez faire une tache répétitive.
Exemple:
Code : Tout sélectionner
IncludePath "mesDevelopement_pb\macro"
XIncludeFile "macro.pbi"
Exemple de modification de syntaxe.
Code macro
Code : Tout sélectionner
Macro mWW(window)
WindowWidth(window,#PB_Window_InnerCoordinate)
EndMacro
Macro mWH(window)
WindowHeight(window,#PB_Window_InnerCoordinate)
EndMacro
Code : Tout sélectionner
CanvasGadget(#Canvas,0,0,mww(#MainForm),mWH(#MainForm))
Code : Tout sélectionner
CanvasGadget(#Canvas,0,0,WindowWidth(#MainForm,#PB_Window_InnerCoordinate),WindowHeight(#MainForm,#PB_Window_InnerCoordinate))
Prenons un exemple, j'ai pour habitude dans mes fenêtres pour une entrée utilisateur d'utiliser un TextGadget pour le libellé un StringGadget pour l'entrée utilisateur, je personnalise la police j'ajoute une aide au string gadget et je place une procédure CallBack pour vérifier l'entrée utilisateur. (précisons que je fais cette opération sur de nombreux développements)
Code sans macro
Code : Tout sélectionner
libelle=TextGadget(#PB_Any,X,Y,W,H,"Nom:")
SetGadgetFont(libelle,FontID(#ArialMedium))
X+H+M ;La hauteur définie avant ainsi qu'une marge
StringGadget(#Str_Nom,X,Y,W,H,"")
SetGadgetFont(#Str_Nom,FontID(#ArialMedium))
GadgetToolTip(#Str_Nom,"Encoder le nom du client")
BindGadgetEvent(#Str_Nom,@EventNomCli())
Code : Tout sélectionner
Macro mString(Id,Libelle,Aide=-1,CallBack=-1)
libelle=TextGadget(#PB_Any,X,Y,W,H,Libelle)
SetGadgetFont(libelle,FontID(#ArialMedium))
X+H+M
StringGadget(Id,X,Y,W,H,"")
SetGadgetFont(Id,FontID(#ArialMedium))
If Aide<>-1
GadgetToolTip(Id,Aide)
EndIf
If CallBack<>-1
BindGadgetEvent(Id,CallBack)
EndIf
EndMacro
Code : Tout sélectionner
mString(#Str_Nom,"Nom","Encoder le nom du client",@EventNomCli())
Remarques importantes:
- Toutes les variables même locales, seront accessible depuis la macro (n'oubliez pas c'est comme si j'avais taper le code)
- Les paramètres passés à la macro ne sont pas typés, on peux donc indifféremment renseigner un string entier un pointeur etc...
- Même si le fichier de la macro devient volumineux et que l'on ne fais pas appel à chaque macro, seul les macros appelées seront compilées, les autres n'aurons aucune incidence sur la taille de l'exécutable.
Attention: l'abus nuit en tout, trop de macros ou des macros avec une syntaxe mal adaptée risque de nuire à la lisibilité de votre code.