Page 1 sur 2

Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 8:11
par microdevweb
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?
  • 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
Les procédures sont donc préférables aux macros.

Alors pourquoi utiliser les macros?
  • Lorsque vous voulez modifier la syntaxe d'une fonction.
  • Lorsque vous voulez faire une tache répétitive.
Il faut considérer les macros comme une librairie personnel, que l'on complète au fils du temps et a inclure au début de son programme.

Exemple:

Code : Tout sélectionner

IncludePath "mesDevelopement_pb\macro"
XIncludeFile "macro.pbi"
Je vous conseille de placer vos macros dans un fichier commun à tous vos développements.

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
Exemple avec macro

Code : Tout sélectionner

CanvasGadget(#Canvas,0,0,mww(#MainForm),mWH(#MainForm))
Exemple sans macro

Code : Tout sélectionner

CanvasGadget(#Canvas,0,0,WindowWidth(#MainForm,#PB_Window_InnerCoordinate),WindowHeight(#MainForm,#PB_Window_InnerCoordinate))
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 : 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 de la macro

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

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.
Edition suite à la remarque de Spock:

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.

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 8:50
par Kwai chang caine
Merci beaucoup MicroDevWeb 8)
Pour ma part, j'avais compris le fonctionnement. ..mais pas vraiment l'intérêt :oops:
Sauf une fois, pour le remplacement ou la modification d'une fonction native.

C'est bon de lire plusieurs explications de la même chose, provenant de sources différentes.
Cela éclaire cette dernière sous un autre angle.

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 9:15
par microdevweb
@Spock,

J'ai ajouté ta remarque. :wink:

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 9:51
par Micheao
merci microdevweb pour ton tuto mais j'ai pas votre niveau et j'ai pas d'idée de programme pour PB

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 10:02
par Anonyme2
Oui les macros deviennent vite imbuvables.

Elles sont pratiques, certaines choses ne sont possible qu'avec je pense.

J'en utilise pour faciliter l'écriture dans des cas comme ceci car j'ai toujours du mal à savoir s'il faut mettre o ou 1:

Code : Tout sélectionner

Macro Affiche_Gadget(Gadget)
      HideGadget(Gadget, 0)
EndMacro

Macro Masque_Gadget(Gadget)
      HideGadget(Gadget, 1)
EndMacro

Macro MAC_DisableWindow(Window)
      DisableWindow(Window, 1)
EndMacro

Macro MAC_EnableWindow(Window)
      DisableWindow(Window, 0)
EndMacro

J'utilise certaines macros Microsoft que je transcris en PB, sinon j'évite de surcharger avec des macros mais on a vite fait d'en avoir pas mal.

Pour des raisons de lisibilité, je rajoute toujours MAC_ devant le nom de macro.
Idem pour les variables globales je met GLB_ devant, on sait immédiatement ce que c'est.

Utile pour moi sur un code très long.

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 10:11
par microdevweb
@Micheao,

Comparer à certains je n'ai certainement pas le niveau non plus. Mais si c'est en forgeant que l'on deviens forgeron, c'est en codant que l'on devient développeur...

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 10:28
par Kwai chang caine
MicroDevWeb a écrit :deviens forgeron, c'est en codant que l'on devient développeur...
Je croyais que t'allais dire "Développeron" :mrgreen:
Denis a écrit :J'utilise certaines macros Microsoft
Tiens...je savais même pas que ça existait !! 8O

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 10:46
par Anonyme2
Kwai chang caine a écrit :
Denis a écrit :J'utilise certaines macros Microsoft
Tiens...je savais même pas que ça existait !! 8O
MAKELONG macro
https://msdn.microsoft.com/fr-fr/librar ... 85%29.aspx

Code : Tout sélectionner

Macro MAC_MakeLong(loWord1, hiWord1) ; forum code - Flype
      ((hiWord1 << 16) | loWord1)
EndMacro
SUBLANGID macro
https://msdn.microsoft.com/fr-fr/librar ... 85%29.aspx

Code : Tout sélectionner

Macro MAC_SUBLANGID(lgid) ; forum code - Flype
      ((lgid)>>10)
EndMacro
PRIMARYLANGID macro
https://msdn.microsoft.com/fr-fr/librar ... 85%29.aspx

Code : Tout sélectionner

Macro MAC_PRIMARYLANGID(lgid) ; forum code - Flype
      ((lgid)&$3FF)
EndMacro
etc.

J'utilise ces macros de Flype depuis des années, ça marche très bien.

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 12:52
par Kwai chang caine
"UN CROIS YABLE !!!!" 8O

Et moi qui pensait que FRED avait inventé les MACROS, alors FRED a aussi pris ça au C :?

Image :lol:

Je devais encore être le seul à ne pas le savoir, surtout ne le répete à personne, :wink: il faut que ça reste entre nous deux, autrement je vais encore passer pour une huitre :oops:
Si j'entends quelqu'un rigoler... je serais que t'as craché le morceau :lol:

Merci de ton explication 8) , je vais encore me coucher moins c.. ce soir...remarque c'est assez souvent :mrgreen:
Je crois que il reste plus que le CAST qu'on peut pas faire avec PB ? car souvent on m'en parle quand je les compare..

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 13:00
par Kwai chang caine
Moi c'était à table....à 10 ans je faisais la gueule :|

Image

Et un peu plus grand..j'avais retrouvé le sourire :D

Image

Puis avec PB et aujourd'hui grace à denis 8)

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 16:28
par falsam
Tout comme Spock je me limite dans l'utilisation des macros sauf pour les PurePunchs.

Effectivement, une macro sert par exemple à remplacer un mot par un autre mot ou une suite de mots dans le code.

Exemple je souhaites remplacer les if par des si et les endif par finsi

Code : Tout sélectionner

Macro si
  If
EndMacro

Macro finsi
  EndIf
EndMacro

Macro affiche
  Debug
EndMacro

a = 2
si a > 1
  affiche "C'est plus grand"
finsi
Micheao a écrit :j'ai pas d'idée de programme pour PB
Micheao tu n'as plus qu'à te lancer dans un include permettant de coder en français :wink:

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 17:53
par Micheao
--> Falsam je travaille sur un petit logiciel .

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 18:00
par SPH
Micheao a écrit :--> Falsam je travaille sur un petit logiciel .
Dis nous en + :mrgreen:

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 18:06
par Micheao
SPH a écrit :
Micheao a écrit :--> Falsam je travaille sur un petit logiciel .
Dis nous en + :mrgreen:
toi est falasam vous m'avez redonner l'enive de coder

ça sera un repertoire ...

Re: Les macros à quoi ça sert?

Publié : jeu. 10/sept./2015 18:14
par SPH
Micheao a écrit :ça sera un repertoire ...
Tu m'intrigues :P