Page 1 sur 1

Réalisez plus facilement vos fenêtres avec les macros et ...

Publié : lun. 07/sept./2015 12:01
par microdevweb
Réalisez plus facilement vos fenêtres avec les macros et BindEvent

Voici un petite fenêtre exemple, ou les macros peuvent être vraiment utiles

(Code édité le 08/09/2015 car erreur sur le calcul de la hauteur de la fenêtre)

Code : Tout sélectionner

LoadFont(0,"Arial",12,#PB_Font_HighQuality)
Enumeration 
      #MainForm
      #Str1
      #Str2
      #Combo
      #Spin
      #Submit
      #Chancel
EndEnumeration
Macro mOpenForm(IdWindows,CloseProcedure)
      OpenWindow(IdWindows,XF,YF,WF,HF,title$,flag)
      BindEvent(#PB_Event_CloseWindow,CloseProcedure,IdWindows)
EndMacro
Macro mString(Id,Label,value,EventProcedure)
      temp=TextGadget(#PB_Any,X,Y,W,H,Label)
      Y+H
      StringGadget(Id,X,Y,W,H,value)
      SetGadgetFont(temp,FontID(0))
      SetGadgetFont(Id,FontID(0))
      If EventProcedure<>-1
            BindGadgetEvent(Id,EventProcedure)
      EndIf
EndMacro
Macro mCombo(Id,Label,EventProcedure)
      temp=TextGadget(#PB_Any,X,Y,W,H,Label)
      Y+H
      ComboBoxGadget(Id,X,Y,W,H)
      SetGadgetFont(temp,FontID(0))
      SetGadgetFont(Id,FontID(0))
      If EventProcedure<>-1
            BindGadgetEvent(Id,EventProcedure)
      EndIf
EndMacro
Macro mAddItem(Id,Value,ItemData)
      AddGadgetItem(Id,-1,Value)
      SetGadgetItemData(Id,CountGadgetItems(Id)-1,ItemData)
EndMacro
Macro mGetData(Id)
      GetGadgetItemData(Id,GetGadgetState(Id))
EndMacro
Macro mSpinValue(Id,value,Ext)
      SetGadgetState(Id,value)
      SetGadgetText(Id,Str(value)+Ext)
EndMacro
Macro mSpin(Id,Label,value,min,max,EventProcedure,Ext)
      temp=TextGadget(#PB_Any,X,Y,W,H,Label)
      Y+H
      SpinGadget(Id,X,Y,W,H,min,max)
      mSpinValue(Id,value,Ext)
      SetGadgetFont(temp,FontID(0))
      SetGadgetFont(Id,FontID(0))
      If EventProcedure<>-1
            BindGadgetEvent(Id,EventProcedure)
      EndIf
EndMacro
Macro mBtForm(SubmitProcedure,ChancelProcedure)
      ButtonGadget(#Submit,X,Y,(W/2)-M,H,"Valider")
      ButtonGadget(#Chancel,X+(W/2)+M,Y,(W/2)-M,H,"Annuler")
      BindGadgetEvent(#Submit,SubmitProcedure)
      BindGadgetEvent(#Chancel,ChancelProcedure)
EndMacro
Procedure CloseMainForm()
      End
EndProcedure
Procedure EventStr2()
      Debug GetGadgetText(#Str2)
EndProcedure
Procedure EventCombo()
      Debug "Le combo a la valeur "+Str(mGetData(#Combo))
EndProcedure
Procedure EventSpin()
      mSpinValue(#Spin,GetGadgetState(#Spin)," %")
EndProcedure
Procedure Save()
      Debug "Vous avez cliquer sur le bouton valider"
EndProcedure
Procedure OpenMainForm()
      ;On détermine ici le nombre de champs de la fenêtre (label inclus)
      ;On détermione la largeur, la hauteur ainsi que la marge
      Protected NbChamp=4,W=180,H=30,M=10
      Protected title$="Teste fenêtre"
      Protected flag=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
      Protected WF=W+(M*2),HF=(NbChamp*((H*2)+M))+H+(M*2)
      Protected X=M,Y=M,temp
      mOpenForm(#MainForm,@CloseMainForm())
      mString(#Str1,"String sans procedure","",-1)
      Y+H+M
      mString(#Str2,"String avec procedure","",@EventStr2())
      Y+H+M
      mCombo(#Combo,"Combo teste",@EventCombo())
      mAddItem(#Combo,"Item 1",1)
      mAddItem(#Combo,"Item 2",2)
      mAddItem(#Combo,"Item 3",3)
      SetGadgetState(#Combo,0)
      Y+H+M
      mSpin(#Spin,"Pourcentage",10,0,100,@EventSpin()," %")
      Y+H+M
      mBtForm(@Save(),@CloseMainForm())
EndProcedure
OpenMainForm()
Repeat:WaitWindowEvent():ForEver

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : lun. 07/sept./2015 22:58
par Ollivier
Ce n'est pas mal. Des petites erreurs, mais qui n'enlèvent en rien à l'observation de l'usage particulier de ces macros.

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : mer. 09/sept./2015 8:51
par Brayane
Jolie tous ça mais comme dis Spock, plus facilement hein ?
J'avoue que mois j'ai du mal ^^

Après c'est plus facile pour toi j'en convient certainement microdevweb :lol:

Il faut dire que PB dispose d'un outils surpuissant qui est justement
Les Macro, j'en est pas vue ailleurs, et c'est aussi parmi tans d'autre chose ce qui fait ça force !

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : mer. 09/sept./2015 11:20
par microdevweb
Spock et Brayane,

Plus facilement est évidement un question de point de vue. Ce type de développement vous permet de définir votre charte de programmation de limité de nombre de lignes à taper (avantage des macros)
Exemple la macro mString(Id,Label,value,EventProcedure), 1 ligne de code qui place une label TextGadget un champs StringGadget pour l'input user change la police des champs et une procédure CallBack() pour la gestion des événements.

Bon je l'avoue, j'ai développé pendant de nombreuses années avec Windev, les événements se gèrent automatiquement via l'ide et dans l’événement concerné du gadget
exemple:
Survol du bouton, clique droit, clique gauche etc...
Avec BindEvent, BindGadgetEvent et BindMenuEvent il est facile de retrouvé cette même philosophie, un désignant une procédure par événement gadget, cela me parait plus propre que de gérer les événements dans la boucle événementielle (c'est mon point de vue) je sais par exemple que Spock est adversaire des procédures et includes. Moi c'est tout le contraire, j'organise maintenant mes programmes comme cela.

Exemple petit soft de gestion de fiche de paie

Code : Tout sélectionner

EnableExplicit
UseSQLiteDatabase()
XIncludeFile "Macro.pbi"
XIncludeFile "Enumeration.pbi"
XIncludeFile "Load.pbi"
XIncludeFile "Structure.pbi"
XIncludeFile "Declare.pbi"
XIncludeFile "Function.pbi"

IncludePath "include\"
XIncludeFile "Para.pbi"
XIncludeFile "MainForm.pbi"
XIncludeFile "Db.pbi"
XIncludeFile "Prestation.pbi"
MakeDb()
OpenMainForm()
Repeat:WaitWindowEvent():ForEver
Chaque chose à sa place, et je ne dois pas chercher des plombes ou je dois faire telle ou telle modifications ou corrections.(Encore une fois de plus je ne veux pas créer de polémique, chacun s'organise comme il veux la meilleur méthode étant celle qui nous convient)

Les macros quant à elles (que j'utilisais très peut avant) me permettent d'éviter les taches répétitives. Et même si la fantaisie m'en prenais, je pourrais m'amuser à retrouver les même commandes que windev en français ex: Si / FindeSi Tanque / FinDeTanque PourTout etc... chose que je ne ferais pas, la syntaxe de PureBasic me convenant parfaitement.

Alors plus facile ? A vous de voir...

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : mer. 09/sept./2015 13:43
par Patrick88
microdevweb a écrit :Exemple la macro mString(Id,Label,value,EventProcedure), 1 ligne de code qui place une label TextGadget un champs StringGadget pour l'input user change la police des champs et une procédure CallBack() pour la gestion des événements.
c'est le ChampDeSaisie de windev, ça.

Patrick

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : mer. 09/sept./2015 18:50
par microdevweb
@Patrick88,

Oui c'est un peux dans cette philosophie.

@Spock,

Désolé si j'ai fais erreur.

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : mer. 09/sept./2015 21:08
par Micheao
Merci de pour le tuto , mais j'ai rien compris du tout

Re: Réalisez plus facilement vos fenêtres avec les macros et

Publié : jeu. 10/sept./2015 8:12
par microdevweb
@Micheao,
Pour te répondre une petite explication sur les macros :wink:
http://www.purebasic.fr/french/viewtopi ... 21&t=15450