[TUTO] Programmation modulaire
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
MoyenContactFIC.pbi module MoyenContactFIC
MoyenContactFIC.pbi module MoyenContactFIC
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
MoyenContactTAB.pbi module MoyenContactTAB
MoyenContactTAB.pbi module MoyenContactTAB
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
Sujet à des modifications
TvaFIC.pbi module TvaFIC
TvaFIC.pbi module TvaFIC
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
Dernière modification par microdevweb le jeu. 14/avr./2016 15:17, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
Sujet à des modifications
TvaTAB.pbi module TvaTAB
TvaTAB.pbi module TvaTAB
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
Dernière modification par microdevweb le jeu. 14/avr./2016 18:40, modifié 2 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
ProduitFIC.pbi module ]ProduitFIC
ProduitFIC.pbi module ]ProduitFIC
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
ProduitTAB.pbi module ProduitTAB
ProduitTAB.pbi module ProduitTAB
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
CommandeFIC.pbi module CommandeFIC
CommandeFIC.pbi module CommandeFIC
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
ImpCommande.pbi module ImpCommande
ImpCommande.pbi module ImpCommande
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
ImpLivaison.pbi module ImpLivaison
ImpLivaison.pbi module ImpLivaison
Dernière modification par microdevweb le jeu. 14/avr./2016 6:09, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
ImpFacture.pbi module ImpFacture
ImpFacture.pbi module ImpFacture
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
CategorieFIC.pbi module CategorieFIC
CategorieFIC.pbi module CategorieFIC
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
En cours de rédaction
CategorieTAB.pbi module CategorieFIC
CategorieTAB.pbi module CategorieFIC
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
Voila la première fenêtre taux de tva est active. Après il y aura beaucoup de copier collé pour garder la même philosophie de développement
Télécharger le zip complet
Télécharger le zip complet
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
Le fichier Pays est maintenant gérable, comme vous pourrez le constater il m'aura suffis de faire un copier coller et modifier quelques paramètres.
Télécharger le zip complet
Télécharger le zip complet
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: [TUTO] Programmation modulaire
Les Bases
Dans ce exemple j'ai créé un modure prj (module du projet) non utilisé dans ce cas, trois modules fenêtre vous remarquerez qu'elle contiennent les mêmes noms de variables et de procédures il est donc vraiment facile de faire un copier collé. Et enfin un module fenêtre principale, en fin de code puisqu’il appelle les autre module
(NOTE: pour le tuto tout est regrouper dans un même fichier, en temps normal j'aurai fais un fichier par module)
Dans ce exemple j'ai créé un modure prj (module du projet) non utilisé dans ce cas, trois modules fenêtre vous remarquerez qu'elle contiennent les mêmes noms de variables et de procédures il est donc vraiment facile de faire un copier collé. Et enfin un module fenêtre principale, en fin de code puisqu’il appelle les autre module
(NOTE: pour le tuto tout est regrouper dans un même fichier, en temps normal j'aurai fais un fichier par module)
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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège