Les macros à quoi ça sert?

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Les macros à quoi ça sert?

Message 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.
Dernière modification par microdevweb le jeu. 10/sept./2015 9:22, modifié 4 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Les macros à quoi ça sert?

Message 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.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Les macros à quoi ça sert?

Message par microdevweb »

@Spock,

J'ai ajouté ta remarque. :wink:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Les macros à quoi ça sert?

Message par Micheao »

merci microdevweb pour ton tuto mais j'ai pas votre niveau et j'ai pas d'idée de programme pour PB
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Les macros à quoi ça sert?

Message 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.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Les macros à quoi ça sert?

Message 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...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Les macros à quoi ça sert?

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Les macros à quoi ça sert?

Message 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.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Les macros à quoi ça sert?

Message 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..
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Les macros à quoi ça sert?

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Les macros à quoi ça sert?

Message 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:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Les macros à quoi ça sert?

Message par Micheao »

--> Falsam je travaille sur un petit logiciel .
Avatar de l’utilisateur
SPH
Messages : 4946
Inscription : mer. 09/nov./2005 9:53

Re: Les macros à quoi ça sert?

Message par SPH »

Micheao a écrit :--> Falsam je travaille sur un petit logiciel .
Dis nous en + :mrgreen:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Les macros à quoi ça sert?

Message 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 ...
Avatar de l’utilisateur
SPH
Messages : 4946
Inscription : mer. 09/nov./2005 9:53

Re: Les macros à quoi ça sert?

Message par SPH »

Micheao a écrit :ça sera un repertoire ...
Tu m'intrigues :P

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre