Re: [TUTO] Programmation modulaire
Publié : jeu. 14/avr./2016 6:04
En cours de rédaction
MoyenContactFIC.pbi module MoyenContactFIC
MoyenContactFIC.pbi module MoyenContactFIC
Forums PureBasic - Français
https://www.purebasic.fr/french/
Code : Tout sélectionner
;************************************************************************************************************************
; Author : MicrodevWeb
; Project Name : TUTO développement modulaire
; Deccription : module TvaFIC
; File Name : TvaFIC.pbi
;************************************************************************************************************************
DeclareModule TvaFIC
;-* PUBLIC VARIABLE/LIST/MAP/CONSTANTE
Enumeration
#New
#Edit
EndEnumeration
;}
;-* PUBLIC DECLARATION
Declare Open(MotherWindow)
Declare SetMode(mode)
Declare SetCurrentId(DbId)
Declare SetRefrechCallback(*callBack)
;}
EndDeclareModule
Module TvaFIC
EnableExplicit
;-* LOCAL VARIABLE/LIST/MAP/CONSTANTE
Global Form,myMotherWindow,btSubmit,btChancel,myMode=#New,title.s
Global txtTaux,strTaux,currentId,*Refresh=-1
;}
;-* LOCAL DECLARATION
Declare Exit()
Declare EventSubmit()
Declare EventShortcut()
Declare EventMask()
Declare AddRecord()
Declare SaveRecord()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
; Réactive la fenêtre mère
DisableWindow(myMotherWindow,#False)
; Ferme la fenêtre
CloseWindow(Form)
; Rend le focus à la fenêtre mère
SetActiveWindow(myMotherWindow)
EndProcedure
Procedure AddRecord()
Protected taux.f=prj::GetFloatValues(strTaux,Chr(32)+Chr(34))
If db::AllReadyExit("taux_tva","taux",StrF(taux),db::#NUMERIQUE)
SetGadgetColor(txtTaux,#PB_Gadget_FrontColor,RGB(255, 0, 0))
SetActiveGadget(strTaux)
MessageRequester(title,"Ce taux de TVA existe déjà")
ProcedureReturn
EndIf
If db::AddTauxTva(taux)
; Rafraichi la fenêtre Tab
If *Refresh<>-1
CallFunctionFast(*Refresh)
EndIf
Exit()
EndIf
EndProcedure
Procedure SaveRecord()
Protected taux.f=prj::GetFloatValues(strTaux,Chr(32)+Chr(34))
If db::AllReadyExit("taux_tva","taux",StrF(taux),db::#NUMERIQUE,currentId)
SetGadgetColor(txtTaux,#PB_Gadget_FrontColor,RGB(255, 0, 0))
SetActiveGadget(strTaux)
MessageRequester(title,"Ce taux de TVA existe déjà")
ProcedureReturn
EndIf
If db::SaveTauxTva(taux,currentId)
; Rafraichi la fenêtre Tab
If *Refresh<>-1
CallFunctionFast(*Refresh)
EndIf
Exit()
EndIf
EndProcedure
Procedure EventSubmit()
; Place les couleurs des gadgets par défaut
SetGadgetColor(txtTaux,#PB_Gadget_FrontColor,#PB_Default)
; Teste si la valeur n'est pas NULL
If prj::GetFloatValues(strTaux,Chr(32)+Chr(34))=0
SetGadgetColor(txtTaux,#PB_Gadget_FrontColor,RGB(255, 0, 0))
SetActiveGadget(strTaux)
ProcedureReturn
EndIf
Select myMode
Case #New
AddRecord()
Case #Edit
SaveRecord()
EndSelect
EndProcedure
; Procédure qui va servir à la validation par Enter et la sortie par Esc
Procedure EventShortcut()
Select EventMenu()
Case $FF ;bt return
EventSubmit()
Case $FF1 ;bt Esc
Exit()
EndSelect
EndProcedure
Procedure EventMask()
; Le masque est de type FLOAT avec 2 décimale et l'extention %
prj::MaskingString(strTaux,4,2,Chr(32)+Chr(37))
EndProcedure
;}
;-* PUBLIC PROCEDURE
Procedure Open(MotherWindow)
Protected item.s
myMotherWindow=MotherWindow
; Modifie le titre suivant le mode
Select myMode
Case #New
title="Nouveau Taux de TVA"
Case #Edit
title="Edition d'un Taux de TVA"
EndSelect
; Ouvre la fenêtre
myMacro::OpenFormFic(300,120)
; Ajout des gadgets
myMacro::Strind(Taux,"Taux de TVA")
SetActiveGadget(strTaux)
; Gestion du masque de saisie
BindGadgetEvent(strTaux,@EventMask())
; En mode édition on remplis les champs de la fenêtre
If myMode=#Edit
; On renseigne item comme suit
;id du gadget|db_colonne|nb_decimal ou 0|extention"
; les item sont séparé par chr(10)
item=Str(strTaux)+"|taux|2| %"
db::FillGadget("taux_tva",item,currentId)
EndIf
EndProcedure
Procedure SetMode(mode)
myMode=mode
EndProcedure
Procedure SetCurrentId(DbId)
currentId=DbId
EndProcedure
Procedure SetRefrechCallback(*callBack)
*Refresh=*callBack
EndProcedure
;}
EndModule
Code : Tout sélectionner
;************************************************************************************************************************
; Author : MicrodevWeb
; Project Name : TUTO développement modulaire
; Deccription : module TvaTAB
; File Name : TvaTAB.pbi
;************************************************************************************************************************
DeclareModule TvaTAB
;-* PUBLIC VARIABLE/LIST/MAP/CONSTANTE
;}
;-* PUBLIC DECLARATION
Declare Open(motherWindow)
Declare Refresh()
;}
EndDeclareModule
Module TvaTAB
EnableExplicit
;-* LOCAL VARIABLE/LIST/MAP/CONSTANTE
Global Form,Table,btNew,btEdit,btDelete,btChancel,title.s,myMotherWindow
Global dbTable.s="taux_tva"
; ICI on va renseigner les colonnes de la table qui vont être affichée
; db_colonne|libellé|largeur|1 si icone de recherche 0 si pas d'icone|nb_decimale si float ou -1|extention ex %"
; Chaque colonne est séprée par un chr(10)
Global tableContent.s
tableContent="taux|Taux|180|1|2| %"+Chr(10)
;}
;-* LOCAL DECLARATION
Declare Exit()
Declare EventNew()
Declare EventEdit()
Declare EventDelete()
Declare EventShortcut()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
; Réactive la fenêtre mère
DisableWindow(myMotherWindow,#False)
; Ferme la fenêtre
CloseWindow(Form)
; Efface la table
Tbl::Free(Table)
; Donne le focus à la fenêtre mère
SetActiveWindow(myMotherWindow)
EndProcedure
Procedure EventNew()
; La fenêtre TAB arrive arpès la FIC donc on fixe la procédure de rafraichismeent par pointeur
TvaFIC::SetRefrechCallback(@Refresh())
TvaFIC::SetMode(TvaFIC::#New)
TvaFIC::Open(Form)
EndProcedure
Procedure EventEdit()
Protected Id
; Récupère l'id de la table de la base de donnée
Id=Tbl::GetLigneSelected(Table)
; La fenêtre TAB arrive arpès la FIC donc on fixe la procédure de rafraichismeent par pointeur
TvaFIC::SetRefrechCallback(@Refresh())
TvaFIC::SetMode(TvaFIC::#Edit)
TvaFIC::SetCurrentId(Id)
TvaFIC::Open(Form)
EndProcedure
Procedure EventDelete()
Protected Id
; Récupère l'id de la table de la base de donnée
Id=Tbl::GetLigneSelected(Table)
If MessageRequester(title,"Etes-vous sure de vouloir supprimer ce taux de TVA",#PB_MessageRequester_YesNo)=#PB_MessageRequester_No
ProcedureReturn
EndIf
If db::IntegrityErrorTauxTva(Id)
MessageRequester("Erreur d'intégrité","Vous ne pouvez pas supprimer ce taux de tva")
ProcedureReturn
EndIf
If Not db::DeleteTauxTva(Id)
ProcedureReturn
EndIf
Refresh()
EndProcedure
Procedure EventShortcut()
Select EventMenu()
Case $FF ; INSERT
EventNew()
Case $FF1 ; F5
EventEdit()
Case $FF2 ;DELETE
EventDelete()
Case $FF3 ;ESC
Exit()
EndSelect
EndProcedure
;}
;-* PUBLIC PROCEDURE
Procedure Open(motherWindow)
myMotherWindow=motherWindow
title="Liste des taux de TVA"
myMacro::OpenFormTAB(300,600)
; Change l'odre de la table
Tbl::SetOrder(Table,"taux")
; Affiche la table
Tbl::Draw(Table)
EndProcedure
Procedure Refresh()
Tbl::Draw(Table)
EndProcedure
;}
EndModule
Code : Tout sélectionner
;************************************************************************************************************************
; Author : MicrodevWeb
; Project Name : TUTO développement modulaire
; Deccription : Les bases
; File Name : LesBase.pb
;************************************************************************************************************************
DeclareModule prj
; Je pourrai placer ici des variables structures, contantes etc qui seront accesible à l'extérieur du module
; Je pourrai également déclaré des procédures publiques et accesible à ce moment depuis l'extérieur du module
EndDeclareModule
Module prj ; Ce module reprend le code général d'un projet
EnableExplicit
; Je placerai ici totues les procedures du module, je pourrai également placer des variables, structures, contantes etc
; Ces dernière ne seront pas accesible à l'extérieur du module
EndModule
DeclareModule fen1
; Je pourrai placer ici des variables structures, contantes etc qui seront accesible à l'extérieur du module
; Je pourrai également déclaré des procédures publiques et accesible à ce moment depuis l'extérieur du module
Declare Open(motherWindow)
EndDeclareModule
Module fen1 ; Ce module reprend le code de la fenêtre 1
EnableExplicit
; Je placerai ici totues les procedures du module, je pourrai également placer des variables, structures, contantes etc
; Ces dernière ne seront pas accesible à l'extérieur du module
Global Form,myMotherWindow
Global Flag=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
Global title.s="Fen1"
; Remarquez que mes variables global étant limitées au module je n'esite pas à m'en servir :)
;-* LOCAL DECLARATION
; Comme dans n'importe quel fichier PureBasic on peut déclaré les procédures
Declare Exit()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
; Active la fenêtre mère
DisableWindow(myMotherWindow,#False)
CloseWindow(Form)
SetActiveWindow(myMotherWindow)
EndProcedure
;}
;-* PUBLIC PRODURE
Procedure Open(motherWindow)
myMotherWindow=motherWindow
; Désactive la fenêtre mère
DisableWindow(myMotherWindow,#True)
Form=OpenWindow(#PB_Any,0,0,800,600,title,Flag,WindowID(myMotherWindow))
; Mise en place des callback
BindEvent(#PB_Event_CloseWindow,@Exit(),Form)
EndProcedure
;}
EndModule
DeclareModule fen2
; Je pourrai placer ici des variables structures, contantes etc qui seront accesible à l'extérieur du module
; Je pourrai également déclaré des procédures publiques et accesible à ce moment depuis l'extérieur du module
Declare Open(motherWindow)
EndDeclareModule
Module fen2 ; Ce module reprend le code de la fenêtre 1
EnableExplicit
; Je placerai ici totues les procedures du module, je pourrai également placer des variables, structures, contantes etc
; Ces dernière ne seront pas accesible à l'extérieur du module
Global Form,myMotherWindow
Global Flag=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
Global title.s="Fen2"
; Remarquez que mes variables global étant limitées au module je n'esite pas à m'en servir :)
;-* LOCAL DECLARATION
; Comme dans n'importe quel fichier PureBasic on peut déclaré les procédures
Declare Exit()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
; Active la fenêtre mère
DisableWindow(myMotherWindow,#False)
CloseWindow(Form)
SetActiveWindow(myMotherWindow)
EndProcedure
;}
;-* PUBLIC PRODURE
Procedure Open(motherWindow)
myMotherWindow=motherWindow
; Désactive la fenêtre mère
DisableWindow(myMotherWindow,#True)
Form=OpenWindow(#PB_Any,0,0,800,600,title,Flag,WindowID(myMotherWindow))
; Mise en place des callback
BindEvent(#PB_Event_CloseWindow,@Exit(),Form)
EndProcedure
;}
EndModule
DeclareModule fen3
; Je pourrai placer ici des variables structures, contantes etc qui seront accesible à l'extérieur du module
; Je pourrai également déclaré des procédures publiques et accesible à ce moment depuis l'extérieur du module
Declare Open(motherWindow)
EndDeclareModule
Module fen3 ; Ce module reprend le code de la fenêtre 1
EnableExplicit
; Je placerai ici totues les procedures du module, je pourrai également placer des variables, structures, contantes etc
; Ces dernière ne seront pas accesible à l'extérieur du module
Global Form,myMotherWindow
Global Flag=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
Global title.s="Fen3"
; Remarquez que mes variables global étant limitées au module je n'esite pas à m'en servir :)
;-* LOCAL DECLARATION
; Comme dans n'importe quel fichier PureBasic on peut déclaré les procédures
Declare Exit()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
; Active la fenêtre mère
DisableWindow(myMotherWindow,#False)
CloseWindow(Form)
SetActiveWindow(myMotherWindow)
EndProcedure
;}
;-* PUBLIC PRODURE
Procedure Open(motherWindow)
myMotherWindow=motherWindow
; Désactive la fenêtre mère
DisableWindow(myMotherWindow,#True)
Form=OpenWindow(#PB_Any,0,0,800,600,title,Flag,WindowID(myMotherWindow))
; Mise en place des callback
BindEvent(#PB_Event_CloseWindow,@Exit(),Form)
EndProcedure
;}
EndModule
DeclareModule mainForm
; Je pourrai placer ici des variables structures, contantes etc qui seront accesible à l'extérieur du module
; Je pourrai également déclaré des procédures publiques et accesible à ce moment depuis l'extérieur du module
Declare Open()
EndDeclareModule
Module mainForm ; Ce module reprend le code de la fenêtre principal
EnableExplicit
; Je placerai ici totues les procedures du module, je pourrai également placer des variables, structures, contantes etc
; Ces dernière ne seront pas accesible à l'extérieur du module
Global Form,btFen1,btFen2,btFen3
Global Flag=#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Maximize
Flag|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget
Flag|#PB_Window_Invisible
Global title.s="Programmation modulaire les bases"
Global X,Y,BtWidth=100,BtHeight=30,Margin=10
; Remarquez que mes variables global étant limitées au module je n'esite pas à m'en servir :)
;-* LOCAL DECLARATION
; Comme dans n'importe quel fichier PureBasic on peut déclaré les procédures
Declare Exit()
Declare EventButton()
Declare PlaceBt()
;}
;-* PRIVATE PROCEDURE
Procedure Exit()
End
EndProcedure
Procedure EventButton()
Select EventGadget()
Case btFen1
fen1::Open(Form)
Case btFen2
fen2::Open(Form)
Case btFen3
fen3::Open(Form)
EndSelect
EndProcedure
Procedure EventResize()
PlaceBt()
EndProcedure
Procedure PlaceBt()
; Centre les boutons
Protected W=WindowWidth(Form),H=WindowHeight(Form)
; Calcul la hauteur de l'ensemble des boutons
Protected HBT=BtHeight*3+(Margin*2)
;Calcul de la position X
X=(W/2)-(BtWidth/2)
;Calcul de la position Y
Y=(H/2)-(HBT/2)
ResizeGadget(btFen1,X,Y,#PB_Ignore,#PB_Ignore)
Y+BtHeight+Margin
ResizeGadget(btFen2,X,Y,#PB_Ignore,#PB_Ignore)
Y+BtHeight+Margin
ResizeGadget(btFen3,X,Y,#PB_Ignore,#PB_Ignore)
EndProcedure
;}
;-* PUBLIC PRODURE
Procedure Open()
Form=OpenWindow(#PB_Any,0,0,800,600,title,Flag)
btFen1=ButtonGadget(#PB_Any,0,0,BtWidth,BtHeight,"Fenêtre 1")
btFen2=ButtonGadget(#PB_Any,0,0,BtWidth,BtHeight,"Fenêtre 2")
btFen3=ButtonGadget(#PB_Any,0,0,BtWidth,BtHeight,"Fenêtre 3")
PlaceBt()
; Mise en place des callback
BindEvent(#PB_Event_CloseWindow,@Exit(),Form)
BindEvent(#PB_Event_SizeWindow,@EventResize(),Form)
BindEvent(#PB_Event_Gadget,@EventButton(),Form)
HideWindow(Form,#False)
EndProcedure
;}
EndModule
; Ouverture du projet
mainForm::Open()
; Boucle principale
Repeat :WaitWindowEvent():ForEver