Page 2 sur 3

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:04
par microdevweb
En cours de rédaction
MoyenContactFIC.pbi module MoyenContactFIC

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:04
par microdevweb
En cours de rédaction
MoyenContactTAB.pbi module MoyenContactTAB

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:05
par microdevweb
Sujet à des modifications
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

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:05
par microdevweb
Sujet à des modifications
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

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:06
par microdevweb
En cours de rédaction
ProduitFIC.pbi module ]ProduitFIC

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:06
par microdevweb
En cours de rédaction
ProduitTAB.pbi module ProduitTAB

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:07
par microdevweb
En cours de rédaction
CommandeFIC.pbi module CommandeFIC

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:08
par microdevweb
En cours de rédaction
ImpCommande.pbi module ImpCommande

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:08
par microdevweb
En cours de rédaction
ImpLivaison.pbi module ImpLivaison

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:09
par microdevweb
En cours de rédaction
ImpFacture.pbi module ImpFacture

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:58
par microdevweb
En cours de rédaction
CategorieFIC.pbi module CategorieFIC

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 6:59
par microdevweb
En cours de rédaction
CategorieTAB.pbi module CategorieFIC

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 15:23
par microdevweb
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

Re: [TUTO] Programmation modulaire

Publié : jeu. 14/avr./2016 19:29
par microdevweb
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

Re: [TUTO] Programmation modulaire

Publié : ven. 15/avr./2016 8:03
par microdevweb
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)

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