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

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

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

Message 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
Dernière modification par microdevweb le mar. 08/sept./2015 6:40, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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.
Brayane
Messages : 54
Inscription : jeu. 27/août/2015 14:08

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

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

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

Message 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...
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

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

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

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

Message par microdevweb »

@Patrick88,

Oui c'est un peux dans cette philosophie.

@Spock,

Désolé si j'ai fais erreur.
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: Réalisez plus facilement vos fenêtres avec les macros et

Message par Micheao »

Merci de pour le tuto , mais j'ai rien compris du tout
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

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

Message par microdevweb »

@Micheao,
Pour te répondre une petite explication sur les macros :wink:
http://www.purebasic.fr/french/viewtopi ... 21&t=15450
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre