[Résolu] exe pour plusieurs fichiers.pb plusieurs fenetres

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

[Résolu] exe pour plusieurs fichiers.pb plusieurs fenetres

Message par micam »

Bonjour,
Malgré mes différentes recherches, je n'ai pas trouvé de réponse à mes questions de "super débutant". (je ne sais pas si j'ai bien cherché)

Pour réaliser une petite appli de gestion de pièces, j'ai crée plusieurs fichiers .pb qui contiennent chacun 300 à 400 lignes avec bien entendu des procédures et des macros. J'aimerai garder ces différents fichiers et ne pas être obligé de rassembler tout dans le seul fichier Start.pb( entre 1 000 et 1 500 lignes c'est beaucoup je vais m'y perdre).
J'aimerai à partir d'un fichier nommé "Start.pb" ouvrir différentes fenetres sans utiliser les fenetres MDI.
Si j'essaie de faire par exemple IncludeFile "DB_Auto.pb" (je n'ai pas tout compris dans les Include ou Xinclude) après avoir mis dans mon premier fichier Start.pb toutes les Procedure OpenWindow_ concernant les différentes fenetres, les autres procédures de ces fichiers ne sont pas reconnues. J'ai donc des messages d'erreur : "impossible de créer une procédure dans une autre procédure".
Le nombre de lignes et de fichiers étant très important, je vous met un exemple récapitulatif que vous comprendrez j'espère.
Si quelqu'un peut m'aider en étant très clair car je suis tout débutant...
Merci d'avance.

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_Start
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Auto
  #Button_Bd_Moto
  #Button_Quitter
  #Menu
EndEnumeration
;}
Define.l Evenement, EvenementWindow, EvenementGadget, EvenementType, EvenementMenu
;}
Procedure OpenWindow_Window_Start()
  If OpenWindow(#Window_Start, 562, 29, 304, 210, "Bienvenue", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Auto, 20, 20, 200, 35, "Pièces auto")
    ButtonGadget(#Button_Bd_Moto, 20, 65, 200, 35, "Pièces moto")
    ButtonGadget(#Button_Quitter, 210, 140, 80, 35, "Quitter")
  EndIf
EndProcedure
Procedure Menu()
  If CreateMenu(#Menu, WindowID(#Window_Start))
    MenuTitle("Base de données")
    MenuItem( 1, "Supprimer un élément")
    MenuItem( 2, "Ajouter un élément")
    MenuBar()
    MenuItem( 3, "Quitter")
  EndIf
EndProcedure

OpenWindow_Window_Start()
Menu()
;{- Evenement loop
Repeat
  Evenement = WaitWindowEvent()
  EvenementGadget = EventGadget()
  EvenementType = EventType()
  EvenementMenu = EventMenu()
  Select Evenement
      
    Case #PB_Event_Gadget
      If EvenementGadget = #Button_Bd_Auto
        MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Auto.pb ou .pbi")
      ElseIf EvenementGadget = #Button_Bd_Moto
        MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Moto.pb ou .pbi")
      ElseIf EvenementGadget = #Button_Quitter
        CloseWindow(#Window_Start)
        Break
      EndIf
      
    Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
      Select EvenementMenu  ; On récupère le numéro de cet élément...
        Case 1 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Delete.pb ou .pbi")
        Case 2 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Update.pb ou .pbi")
        Case 3 : CloseWindow(#Window_Start): Break
      EndSelect
      
    Case #PB_Event_CloseWindow
      EvenementWindow = EventWindow()
      If EvenementWindow = #Window_Start
        CloseWindow(#Window_Start)
        Break
      EndIf
  EndSelect
ForEver
;
;}

Dernière modification par micam le lun. 09/juil./2012 22:00, modifié 1 fois.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Un exe pour plusieurs fichiers .pb donc plusieurs fenetr

Message par case »

je ne comprend pas bien ton problème.

tu crée un fichier start.pb
puis un fichier auto.pb
et moto.pb

tu include auto et moto .pb dans start.pb et a la compilation ces fichiers deviendront partie integrante de ton execuitable

start.pb

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_Start
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Auto
  #Button_Bd_Moto
  #Button_Quitter
  #Menu
EndEnumeration
;}
Define.l Evenement, EvenementWindow, EvenementGadget, EvenementType, EvenementMenu
;}
Procedure OpenWindow_Window_Start()
  If OpenWindow(#Window_Start, 562, 29, 304, 210, "Bienvenue", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Auto, 20, 20, 200, 35, "Pièces auto")
    ButtonGadget(#Button_Bd_Moto, 20, 65, 200, 35, "Pièces moto")
    ButtonGadget(#Button_Quitter, 210, 140, 80, 35, "Quitter")
  EndIf
EndProcedure
Procedure Menu()
  If CreateMenu(#Menu, WindowID(#Window_Start))
    MenuTitle("Base de données")
    MenuItem( 1, "Supprimer un élément")
    MenuItem( 2, "Ajouter un élément")
    MenuBar()
    MenuItem( 3, "Quitter")
  EndIf
EndProcedure
IncludeFile( "moto.pb")
IncludeFile( "auto.pb")
OpenWindow_Window_Start()
Menu()
;{- Evenement loop
Repeat
  Evenement = WaitWindowEvent()
  EvenementGadget = EventGadget()
  EvenementType = EventType()
  EvenementMenu = EventMenu()
  Select Evenement
     
    Case #PB_Event_Gadget
      If EvenementGadget = #Button_Bd_Auto
        auto()
      ElseIf EvenementGadget = #Button_Bd_Moto
        moto()
      ElseIf EvenementGadget = #Button_Quitter
        CloseWindow(#Window_Start)
        Break
      EndIf
     
    Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
      Select EvenementMenu  ; On récupère le numéro de cet élément...
        Case 1 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Delete.pb ou .pbi")
        Case 2 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Update.pb ou .pbi")
        Case 3 : CloseWindow(#Window_Start): Break
      EndSelect
     
    Case #PB_Event_CloseWindow
      EvenementWindow = EventWindow()
      If EvenementWindow = #Window_Start
        CloseWindow(#Window_Start)
        Break
      EndIf
  EndSelect
ForEver
;
;}

auto.pb

Code : Tout sélectionner




; auto.pb
Procedure auto()
  auto=OpenWindow(#PB_Any,0,0,500,500,"AUTO",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  Repeat
    ev=WaitWindowEvent()
  Until ev=#PB_Event_CloseWindow And EventWindow()=auto  
  CloseWindow(auto)
EndProcedure

moto.pb

Code : Tout sélectionner




; moto.pb
Procedure moto()
  moto=OpenWindow(#PB_Any,0,0,500,500,"moto",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  Repeat
    ev=WaitWindowEvent()
  Until ev=#PB_Event_CloseWindow And EventWindow()=moto  
  CloseWindow(moto)
EndProcedure
  


il faut juste se rappeler que pour appeler une procedure depuis une autre procedure il faut qu'elle soit deja déclarée avant
il en vas de même pour toute les structures

en gros

Code : Tout sélectionner

procedure a()
b()
endprocedure
procedure b()
 debug "test"
endprocedure
ne se compilera pas car lorsque pb rencontrera b() dans la procedure a() il ne connais pas encore b() et cela générera une erreur.


par contre si on inverse, cela fonctionnera

Code : Tout sélectionner

procedure b()
 debug "test"
endprocedure
procedure a()
b()
endprocedure

une solution est de déclarer les procédures avant de les compiler

Code : Tout sélectionner

Declare a()
Declare b()


Procedure a()
b()
EndProcedure
Procedure b()
 Debug "test"
EndProcedure

ImageImage
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Un exe pour plusieurs fichiers .pb donc plusieurs fenetr

Message par case »

include inclue le code a l'emplacement ou se trouve l'include

test.pb

Code : Tout sélectionner

debug 'test"

test2.pb

Code : Tout sélectionner

debug "ceci est un test"
includefile("test.pb")
debug "and voila"
compiler test2.pb affichera
ceci est un test
test
and voila


personellement quand j'utilise des includes dans mon source je me débrouille pour mettre tout ce qui est déclaration et structures/ variables dans un seul fichier que j'inclue au début de mon code.
j'utilise toujours les déclarations de procédures car j'aime bien les mettre en fin de code et cela évite les problèmes de procédures non encore vues par le compilateur dans une autre procedure

il ne faut pas mettre d'include d'un code contenant des procédures dans une procedure.
ImageImage
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: Un exe pour plusieurs fichiers .pb donc plusieurs fenetr

Message par micam »

Bonjour Case,
Merci pour ta réponse rapide.
Malheureusement je n'ai pas tout compris, ou bien j'ai mal expliqué mon problème.
Je vais essayer d'être plus clair en joignant un exemple de fichier un peu plus complet.
Merci encore.

Le fichier Start.pb

Code : Tout sélectionner



;============================ fichier Start.pb =====================



Enumeration
  #Window_Start
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Auto
  #Button_Bd_Moto
  #Button_Quitter
  #Menu
EndEnumeration
;}
Define.l Evenement, EvenementWindow, EvenementGadget, EvenementType, EvenementMenu
;}
Procedure OpenWindow_Window_Start()
  If OpenWindow(#Window_Start, 562, 29, 304, 210, "Bienvenue", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Auto, 20, 20, 200, 35, "Pièces auto")
    ButtonGadget(#Button_Bd_Moto, 20, 65, 200, 35, "Pièces moto")
    ButtonGadget(#Button_Quitter, 210, 140, 80, 35, "Quitter")
  EndIf
EndProcedure
Procedure Menu()
  If CreateMenu(#Menu, WindowID(#Window_Start))
    MenuTitle("Base de données")
    MenuItem( 1, "Supprimer un élément")
    MenuItem( 2, "Ajouter un élément")
    MenuBar()
    MenuItem( 3, "Quitter")
  EndIf
EndProcedure
OpenWindow_Window_Start()
Menu()
;{- Evenement loop
Repeat
  Evenement = WaitWindowEvent()
  EvenementGadget = EventGadget()
  EvenementType = EventType()
  EvenementMenu = EventMenu()
  Select Evenement
      
    Case #PB_Event_Gadget
      If EvenementGadget = #Button_Bd_Auto
         MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Auto.pb ou .pbi")
      ElseIf EvenementGadget = #Button_Bd_Moto
        MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Moto.pb ou .pbi")
      ElseIf EvenementGadget = #Button_Quitter
        CloseWindow(#Window_Start)
        Break
      EndIf
      
    Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
      Select EvenementMenu  ; On récupère le numéro de cet élément...
        Case 1 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Delete.pb ou .pbi")
        Case 2 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Update.pb ou .pbi")
        Case 3 : CloseWindow(#Window_Start): Break
      EndSelect
      
    Case #PB_Event_CloseWindow
      EvenementWindow = EventWindow()
      If EvenementWindow = #Window_Start
        CloseWindow(#Window_Start)
        Break
      EndIf
  EndSelect
ForEver
;
;}
Le fichier DB_auto.pb

Code : Tout sélectionner




;============================ fichier DB_auto.pb =====================


;
Enumeration
  #Window_Auto
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Moto
  #Button_Quitter
  #ListIcon_Auto
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}



Procedure OpenWindow_Window_Auto()
  If OpenWindow(#Window_Auto, 562, 29, 304, 181, "Pièces auto en stock", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Moto, 20, 135, 185, 35, "Base de données moto")
    ButtonGadget(#Button_Quitter, 205, 135, 80, 35, "Quitter")
    ListIconGadget(#ListIcon_Auto, 20, 15, 265, 105, "Pièces en stocks", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_Auto,1,"Quantité",100)
  EndIf
EndProcedure

UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   
   ProcedureReturn Result
EndProcedure


Procedure Bdd_Auto()
  DatabaseFile$ = #PB_Compiler_FilePath+"/Database.sqlite"
If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   If OpenDatabase(0, DatabaseFile$, "", "",#PB_Database_SQLite)
   
      CheckDatabaseUpdate(0, "CREATE TABLE Auto (nom CHAR(50), quantite INT)")

      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Filtre a air', '10')")
      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Bougies', '5')")
      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Courroies', '20')")
      
      If DatabaseQuery(0, "SELECT * FROM Auto")

        While NextDatabaseRow(0)
AddGadgetItem(#ListIcon_Auto, CountGadgetItems(#ListIcon_Auto), GetDatabaseString(0, 0) + Chr(10) + GetDatabaseString(DBSQLite, 1));             Debug GetDatabaseString(0, 0)
Wend
      
         FinishDatabaseQuery(0)
      EndIf
      
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf
EndProcedure

OpenWindow_Window_Auto()
Bdd_Auto()
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_Bd_Moto
             ElseIf EventGadget = #ListIcon_Auto
      ElseIf EventGadget = #Button_Quitter
         CloseWindow(#Window_Auto)
        Break
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_Auto
        CloseWindow(#Window_Auto)
        Break
      EndIf
  EndSelect
ForEver
;
;}
et enfin le fichier DB_moto.pb

Code : Tout sélectionner



;============================ fichier DB_moto.pb =====================







;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_Moto
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Fruits
  #Button_Quitter
  #ListIcon_Moto
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
UseSQLiteDatabase()
Procedure OpenWindow_Window_Moto()
  If OpenWindow(#Window_Moto, 562, 29, 304, 181, "Pièces moto en stock", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Fruits, 20, 135, 185, 35, "Base de données auto")
    ButtonGadget(#Button_Quitter, 205, 135, 80, 35, "Quitter")
    ListIconGadget(#ListIcon_Moto, 20, 15, 265, 105, "Pièces en stocks", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_Moto,1,"Quantité",100)
  EndIf
EndProcedure
Procedure CheckDatabaseUpdate(Database, Query$)
   Result = DatabaseUpdate(Database, Query$)
   If Result = 0
      Debug DatabaseError()
   EndIf
   
   ProcedureReturn Result
EndProcedure

Procedure Bdd_Moto()
  DatabaseFile$ = #PB_Compiler_FilePath+"/Database.sqlite"
If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   If OpenDatabase(0, DatabaseFile$, "", "",#PB_Database_SQLite)
   
      CheckDatabaseUpdate(0, "CREATE TABLE Moto (nom CHAR(50), quantite INT)")

      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Pneu avant', '6')")
      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Casque', '52')")
      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Poignee', '12')")
      
      If DatabaseQuery(0, "SELECT * FROM Moto")

        While NextDatabaseRow(0)
AddGadgetItem(#ListIcon_Moto, CountGadgetItems(#ListIcon_Moto), GetDatabaseString(0, 0) + Chr(10) + GetDatabaseString(DBSQLite, 1));             Debug GetDatabaseString(0, 0)
Wend
      
         FinishDatabaseQuery(0)
      EndIf
      
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf
EndProcedure

OpenWindow_Window_Moto()
Bdd_Moto()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Button_Bd_Fruits
      ElseIf EventGadget = #Button_Quitter
                CloseWindow(#Window_Moto)
        Break
      ElseIf EventGadget = #ListIcon_Moto
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_Moto
        CloseWindow(#Window_Moto)
        Break
      EndIf
  EndSelect
ForEver
;
;}
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Un exe pour plusieurs fichiers .pb donc plusieurs fenetr

Message par case »

tu t'y prend assez mal en effet, tu ne dois pas créer des parties de ton programme comme des programmes indépendants et déclarer plusieurs fois les mêmes variables et les mêmes structures/constantes dans chacun d'eux.

pour exemple :
start

Code : Tout sélectionner


Declare moto()
Declare auto()
;============================ fichier Start.pb =====================

Enumeration
  #Window_Start
  #Window_Moto
  #Window_auto
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_Bd_Auto
  #Button_Bd_Moto
  #ListIcon_Moto  
  #ListIcon_Auto
  #Button_Quitter
  #Button_Quitter_moto
  #Button_Quitter_auto
  #button_auto_to_moto
  #button_moto_to_auto
  #Menu      
EndEnumeration
;}
Define.l Evenement, EvenementWindow, EvenementGadget, EvenementType, EvenementMenu
Define.l Event, EventWindow, EventGadget, EventType, EventMenu

;}
Procedure OpenWindow_Window_Start()
  If OpenWindow(#Window_Start, 562, 29, 304, 210, "Bienvenue", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_Bd_Auto, 20, 20, 200, 35, "Pièces auto")
    ButtonGadget(#Button_Bd_Moto, 20, 65, 200, 35, "Pièces moto")
    ButtonGadget(#Button_Quitter, 210, 140, 80, 35, "Quitter")
  EndIf
EndProcedure
Procedure Menu()
  If CreateMenu(#Menu, WindowID(#Window_Start))
    MenuTitle("Base de données")
    MenuItem( 1, "Supprimer un élément")
    MenuItem( 2, "Ajouter un élément")
    MenuBar()
    MenuItem( 3, "Quitter")
  EndIf
EndProcedure
UseSQLiteDatabase()
IncludeFile("moto.pb")
IncludeFile("auto.pb")

OpenWindow_Window_Start()
Menu()
;{- Evenement loop
Repeat
  Evenement = WaitWindowEvent()
  EvenementGadget = EventGadget()
  EvenementType = EventType()
  EvenementMenu = EventMenu()
  Select Evenement
      
    Case #PB_Event_Gadget
      If EvenementGadget = #Button_Bd_Auto
        auto()
      ElseIf EvenementGadget = #Button_Bd_Moto
        moto()
      ElseIf EvenementGadget = #Button_Quitter
        CloseWindow(#Window_Start)
        Break
      EndIf
    Case #PB_Event_Menu      ; Un élément du menu a été sélectionné
      Select EvenementMenu  ; On récupère le numéro de cet élément...
        Case 1 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Delete.pb ou .pbi")
        Case 2 : MessageRequester("Ouvrir :", "J'aimerai ouvrir une autre fenetre présente dans un autre fichier nommé : "+Chr(13) + "DB_Update.pb ou .pbi")
        Case 3 : CloseWindow(#Window_Start): Break
      EndSelect
    Case #PB_Event_CloseWindow
      EvenementWindow = EventWindow()
      If EvenementWindow = #Window_Start
        CloseWindow(#Window_Start)
        Break
      EndIf
  EndSelect
ForEver
;
auto

Code : Tout sélectionner

Procedure OpenWindow_Window_Auto()
  If OpenWindow(#Window_Auto, 562, 29, 304, 181, "Pièces auto en stock", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#button_auto_to_moto, 20, 135, 185, 35, "Base de données moto")
    ButtonGadget(#Button_Quitter_auto, 205, 135, 80, 35, "Quitter")
    ListIconGadget(#ListIcon_Auto, 20, 15, 265, 105, "Pièces en stocks", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_Auto,1,"Quantité",100)
  EndIf
EndProcedure


Procedure Bdd_Auto()
  DatabaseFile$ = #PB_Compiler_FilePath+"/Database.sqlite"
If CreateFile(0, DatabaseFile$)
   CloseFile(0)
   If OpenDatabase(0, DatabaseFile$, "", "",#PB_Database_SQLite)
   
      CheckDatabaseUpdate(0, "CREATE TABLE Auto (nom CHAR(50), quantite INT)")

      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Filtre a air', '10')")
      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Bougies', '5')")
      CheckDatabaseUpdate(0, "INSERT INTO Auto (nom, quantite) VALUES ('Courroies', '20')")
     
      If DatabaseQuery(0, "SELECT * FROM Auto")

        While NextDatabaseRow(0)
AddGadgetItem(#ListIcon_Auto, CountGadgetItems(#ListIcon_Auto), GetDatabaseString(0, 0) + Chr(10) + GetDatabaseString(DBSQLite, 1));             Debug GetDatabaseString(0, 0)
Wend
     
         FinishDatabaseQuery(0)
      EndIf
     
      CloseDatabase(0)
   Else
      Debug "Can't open database !"
   EndIf
Else
   Debug "Can't create the database file !"
EndIf
EndProcedure
Procedure auto()
OpenWindow_Window_Auto()
Bdd_Auto()
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #button_auto_to_moto
                 CloseWindow(#Window_Auto)
                 gomoto=1
                 Break
             ElseIf EventGadget = #ListIcon_Auto
      ElseIf EventGadget = #Button_Quitter_auto
         CloseWindow(#Window_Auto)
        Break
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_Auto
        CloseWindow(#Window_Auto)
        Break
      EndIf
  EndSelect
ForEver
If gomoto=1
  moto()
  EndIf
;
;}
EndProcedure

moto

Code : Tout sélectionner


;============================ fichier DB_moto.pb =====================

;}
UseSQLiteDatabase()
Procedure OpenWindow_Window_Moto()
  If OpenWindow(#Window_Moto, 562, 29, 304, 181, "Pièces moto en stock", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#button_moto_to_auto, 20, 135, 185, 35, "Base de données auto")
    ButtonGadget(#Button_Quitter_moto, 205, 135, 80, 35, "Quitter")
    ListIconGadget(#ListIcon_Moto, 20, 15, 265, 105, "Pièces en stocks", 170, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_Moto,1,"Quantité",100)
  EndIf
EndProcedure
Procedure CheckDatabaseUpdate(Database, Query$)
  Result = DatabaseUpdate(Database, Query$)
  If Result = 0
    Debug DatabaseError()
  EndIf
  
  ProcedureReturn Result
EndProcedure

Procedure Bdd_Moto()
  DatabaseFile$ = #PB_Compiler_FilePath+"/Database.sqlite"
  If CreateFile(0, DatabaseFile$)
    CloseFile(0)
    If OpenDatabase(0, DatabaseFile$, "", "",#PB_Database_SQLite)
      
      CheckDatabaseUpdate(0, "CREATE TABLE Moto (nom CHAR(50), quantite INT)")
      
      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Pneu avant', '6')")
      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Casque', '52')")
      CheckDatabaseUpdate(0, "INSERT INTO Moto (nom, quantite) VALUES ('Poignee', '12')")
      
      If DatabaseQuery(0, "SELECT * FROM Moto")
        
        While NextDatabaseRow(0)
          AddGadgetItem(#ListIcon_Moto, CountGadgetItems(#ListIcon_Moto), GetDatabaseString(0, 0) + Chr(10) + GetDatabaseString(DBSQLite, 1));             Debug GetDatabaseString(0, 0)
        Wend
        
        FinishDatabaseQuery(0)
      EndIf
      
      CloseDatabase(0)
    Else
      Debug "Can't open database !"
    EndIf
  Else
    Debug "Can't create the database file !"
  EndIf
EndProcedure

Procedure moto()
  OpenWindow_Window_Moto()
  Bdd_Moto()
  
  ;{- Event loop
  Repeat
    Event = WaitWindowEvent()
    Select Event
        ; ///////////////////
      Case #PB_Event_Gadget
        EventGadget = EventGadget()
        EventType = EventType()
        If EventGadget = #button_moto_to_auto
          CloseWindow(#Window_moto)
          goauto=1
          Break
        ElseIf EventGadget = #Button_Quitter_moto
          CloseWindow(#Window_Moto)
          Break
        ElseIf EventGadget = #ListIcon_Moto
        EndIf
        ; ////////////////////////
      Case #PB_Event_CloseWindow
        EventWindow = EventWindow()
        If EventWindow = #Window_Moto
          CloseWindow(#Window_Moto)
          Break
        EndIf
    EndSelect
  ForEver
  If goauto=1
    auto()
  EndIf
  ;
  ;}
EndProcedure

attention c'est du vite fait et pas forcement la meilleur manière de faire.

tu remarquera que j'ai enlevé toute traces de define et autre énumération de tes 2 includes auto et moto
et que j'ai mis tout cela dans le programme principal.

lorsque tu fait

Code : Tout sélectionner

enumeration 
  #button_quit
endenumeration
tu donne a la constante #button_quit la valeur 0 cette valeur est fixe pour l'ensemble du programme. il ne sert a rien d'ajouter une autre énumération dans auto ou moto puisqu'elle est deja faite ici.
l'avantage d’énumérer toute les constantes dans le programme principal est que tout tes gadgets auront une valeur différente. idem pour les fenêtres et les defines.

de plus evite d'utiliser les memes constantes pour un gadget dans des fenetres differentes car l'id du gadget est global et le bouton disparait de la fenetre ou il se trouvait precedement.
voir ma modif du code.




pour bien comprendre comment tu dois t'y prendre le plus simple serait que si tu ajoute un module a ton programme principale tu le code dans celui ci directement puis une fois que tu as bien cerné le problème et terminé la base du code tu peux le couper et le coller dans un autre fichier puis l'inclure dans le programme principal a l'aide d'un include.
ImageImage
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

[Resolu] exe pour plusieurs fichiers.pb donc plusieurs fene

Message par micam »

Bonjour case,
Tes explications sont limpides.
Tout marche SUPER BIEN.
Merci encore pour tout le temps que tu m'a consacré.
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: Un exe pour plusieurs fichiers .pb donc plusieurs fenetr

Message par Atlante »

Au passage, je vois que tu fais de la base de donnée.
As-tu un minimum de notion de conception merise ou uml ?
Cela pourra t'éviter pas mal de galère si tu veux faire une application de type pro.
Une base de donnée bien pensée, c'est la clé de la réussite.
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: [Résolu] exe pour plusieurs fichiers.pb plusieurs fenetr

Message par micam »

Bonjour Atlante,
Je ne connaissais pas. Je vais de ce pas sur google.
Merci pour l'info.
Répondre