Page 1 sur 2

Deux textes différents dans une meme box.

Publié : ven. 10/déc./2010 16:53
par bladerunner46
Bonjour à tous, et encore merci pour les réponses. Je vais essayer et voir si ça marche pour les input dans une fenetre.
Bien. Vous savez que je comprends vite, mais qu'il faut m'expliquer encore et encore... On ne passe pas du ZX81 à vista sans casser des oeufs ! lol

donc, je commence un petit programme de gestion.
J'ai un menu dans lequel on choisit des items (des plats), et ils s'affichent à côté sous forme d'une addition. Tout va bien pour le premier, mais après, plus rien ne marche.
J'ai utilisé des procedures pour m'y retrouver:
ouverture fenetre, affichage de base:

Code : Tout sélectionner

If CreateImage(0, 1265, 735) And StartDrawing(ImageOutput(0))
      DrawingMode(#PB_2DDrawing_Transparent)
      
        Box(0,0,1265,735, RGB(255,255,255))
        
   StopDrawing() 
      ImageGadget(0, 0, 0, 1265, 735, ImageID(0))
EndIf
menu general.
les case renvoient à une procedure facturation. Je relance l'affichage, fais un drawtext sans probleme, mais si je refais un case avec un autre drawtext, rien ne se passe. Au secours !!!

Merci d'avance. Purebasic est beaucoup plus complexe que le basic que j'utilisais il y a une vingtaine d'années (GFA sur Atari), mais je suppose que les possibilités sont plus importantes.

Re: Deux textes différents dans une meme box.

Publié : ven. 10/déc./2010 18:26
par venom
Bonjour,

tu n'aurais pas un code fonctionnel sous le coude pour mieux comprendre le problème stp ?






@++

Re: Deux textes différents dans une meme box.

Publié : sam. 11/déc./2010 11:33
par bladerunner46
Merci Venom, je te fais passer ça en début de semaine. (je me connecte dans une cyberbase, car dans mon coin de campagne profonde, nous en sommes encore au 56kb, j'âge de pierre, quoi)

Re: Deux textes différents dans une meme box.

Publié : sam. 11/déc./2010 11:37
par Backup
Pourquoi , pour un logiciel de facturation, utilise tu le mode graphique ?

et pas les gadgets windows , qui sont plus adapté ...

Re: Deux textes différents dans une meme box.

Publié : sam. 11/déc./2010 13:55
par dayvid
Oui la console conviendrait t-il pas mieux ou l'interface fenêtré aussi :)

Re: Deux textes différents dans une meme box.

Publié : sam. 11/déc./2010 16:30
par Backup
non la console , ça va pas le faire !! :roll:

arrête avec ta console ; on est plus en 1981 !! :roll:

Re: Deux textes différents dans une meme box.

Publié : mar. 14/déc./2010 16:45
par bladerunner46
bonjour à tous. Oui, ce serait galère avec la console au niveau définition, d'autant plus qu'elle ne s'affiche que sur la moitié gauche de l'écran. Encore merci Dobro, pour m'avoir orienté vers les gadgets. J'ai un peu potassé ça ce week end, et voila ce que cela donne.
bon, comme demandé plus haut, voilà le code de mon petit prog.

Comme disait Bashung, je cogite, je cogite, je m'agite, mais ça ne marche pas.

Maintenant, je bute sur un problème incompréhensible. J'enchaine des petites procédures sans problème, mais entre Choixtable() et Choixplats(), cela ne marche plus.
Si on enlève le
Le programme ne reconnaît pas la procédure.
J'ai mis le case 3 (choixplats) en commentaire pour que le programme puisse démarrer.

J'ai réussi à contourner le problème avec des gosub, mais je sens que ce n'est pas propre...

Merci d'avance aux pros de m'éclairer, car là, je suis complètement bloqué.

Code : Tout sélectionner

Procedure Ouverturefenetreprincipale()
  OpenWindow(0, 5, 5, 1260, 700, "Exemple de gestion des évènements...", #PB_Window_SystemMenu)
EndProcedure

Procedure Masqueaddition()

position = 100
  position1 = 80
  numerogadget = 1  
         For compteur = 1 To 25
    
    
    compteur$ = Str(compteur)
    
          
            StringGadget(compteur, 820,  position, 20, 20, compteur$)
            
           position + 20
         Next
         
        position = 100
         
  
  
         For compteur2 = 100 To 125
    
   
    compteur2$ = Str(compteur2)
    
          
            StringGadget(compteur2, 850,  position, 360, 20, "")  
           
           position + 20
         Next 
         
    StringGadget(0, 850,  40, 360, 20, "                                     ADDITION       ")      

 EndProcedure
       
Procedure Fin()
   CloseWindow(0)
   End
 EndProcedure
 
Procedure Ouverturetable()
   
   If CreateMenu(0, WindowID(0))
     MenuTitle("CHOISIR UNE TABLE")
     MenuItem(1, "Table 1")
     MenuItem(2, "Table 2")
     MenuBar()
     MenuItem(3, "Entrer Des Plats")
     MenuBar()
     MenuItem(0, "Quitter")
   EndIf
     
   Repeat
     Event = WaitWindowEvent()
     
     
           
     
     Select Event
    
       Case #PB_Event_Menu
         Select EventMenu()
             Case 1 : SetGadgetText(0,"                                     ADDITION       TABLE      1" )           
               
             Case 2 : SetGadgetText(0,"                                     ADDITION       TABLE      2" ) 
              
             Case 3 : ;Choixplats()
               
             Case 0 : Fin() ; ensuite, insérer ici procedure retour menuprincipal
                
         EndSelect
         
         
     EndSelect
    
     
   Until Event = #PB_Event_CloseWindow
 
 EndProcedure  
   
 Procedure Choixplats()
   StringGadget(100, 620,  100, 500, 20, "Nous sommes dans la procédure choix plats")
   Delay(1000)
   CloseWindow(0)
   End
 EndProcedure
 
 
 
 
 ;*******************************************    DEBUT DU PROGRAMME     **********************************************
 
  Ouverturefenetreprincipale()
  
  Masqueaddition()
  
  Ouverturetable()
  
  compteurpositioncase = 100  
  positionitem = 100
  
  Plat1$ = "Rouleaux de Printemps"
  Plat2$ = "Confit de Canard"
  Plat3$ = "rocamadour"
  Plat4$ = "Creme Glacéé"

Re: Deux textes différents dans une meme box.

Publié : mar. 14/déc./2010 16:49
par bladerunner46
P.S. la procedure originale Choixplats() était la suivante:

Code : Tout sélectionner

Procedure Choixplats()
     
   If CreateMenu(0, WindowID(0))
     MenuTitle("CHOISIR  DES PLATS")
     
     MenuItem(3, Plat1$)
     MenuItem(4, Plat2$)
     MenuItem(5, Plat3$)
     MenuItem(6, Plat4$)
     MenuBar()
     MenuItem(0, "Quitter")
   EndIf
   
   Repeat
     Event = WaitWindowEvent()
       
     Select Event
    
       Case #PB_Event_Menu
         Select EventMenu()
             
            
             Case 3 : SetGadgetText(compteurpositioncase, Plat1$)  
             compteurpositioncase + 1 
           
             Case 4 : SetGadgetText(compteurpositioncase, Plat2$)    
             compteurpositioncase + 1
          
             Case 5 : SetGadgetText(compteurpositioncase, Plat3$)  
             compteurpositioncase + 1 
           
             Case 6 : SetGadgetText(compteurpositioncase, Plat4$)    
               compteurpositioncase + 1
               
              Case 0 : Fin() 
                
         EndSelect
         
         
     EndSelect
     
     ; Ensuite, rajouter le compteur de lignes pour suspendre l'addition a 25 lignes
     ; Rajouter les procedures d'annulation de ligne ou de table et les onerror
     ; Rajouter aussi le fichier des plats saisis sur la table pour impression et sauvegarde
     ; Rajouter le compteur montant addition
     ; Rajouter le fichier memorisant la table pour rappel ou ajout sur l'addition
     ; Rajouter la procedure addition
     ; Rajouter les fichiers de gestion des stocks
     ; Rajouter les fichiers de sauvegarde
     
     
   Until Event = #PB_Event_CloseWindow
 
 EndProcedure

Re: Deux textes différents dans une meme box.

Publié : mar. 14/déc./2010 17:17
par Backup
ps: utilise les boutons [ code ] au dessus de la zone d'edition
lorsque tu post un code ;)

par exemple , tu colle ton code dans l'editeur du forum
tu selectionne le code et tu clique sur le petit bouton [ code ]
cela aura pour effet , d'entourer ton code des balises BBcode

Code : Tout sélectionner

 et [/code ]

ton code sera visible dans un cadre et evitera d'afficher des smileys en pleins millieu

ex : si ton code contient une ligne genre :

a=(3* 8 )
cela risque d'apparaitre comme cela
a=(3* 8)


alors qu'avec les balises :
[code]a=(3* 8)

ps2: si tu cite quelqu'un c'est Quote qu'il faut utiliser ;)

j'ai réediter tes messages pour corriger (bouton edit ) ;)

Re: Deux textes différents dans une meme box.

Publié : mar. 14/déc./2010 21:09
par Ar-S
Salut,
Si tu pouvais donner un code avec tes gadgets ce serait plus pratique pour tester.

Il a l'air de te manquer un ProcedureReturn tavaleur.

Re: Deux textes différents dans une meme box.

Publié : mer. 15/déc./2010 3:08
par boddhi
Ton problème vient du fait que tu déclares tes variables Platx$ en dehors de ta procédure Choixplats() !
Lorsque tu fais appel à ta procédure, ces variables sont donc vides et ton menu ne peut s'afficher correctement !

Deux solutions : soit tu tu déclares ces variables en Global soit tu les déclares en local à l'intérieur de ta procédure :wink:

Par ailleurs, ton code, tel qu'il est construit, va te poser un problème car une fois que tu as appelé ton menu des plats, le menu des tables disparaît. Tu perds ainsi le bénéfice de ce que tu aurais déjà saisi pour une autre table !!! Sans parler de la nécessité de gérer la création incessante de tel ou tel menu... :(

Si ça peux t'aider, je te propose le code suivant (c'est une base :wink: ) :

Code : Tout sélectionner

;EnableExplicit

Structure Plat ; Type de données communes à chaque plat
  Nom.s
  Prix.f
EndStructure
Structure Addition ; Type de données communes à chaque table
  Table.i
  NbPlats.i
  List Plats.i()
EndStructure

Global NbPlats=4 ; Nombre de plats disponibles dans le menu
Global NbTables=2 ; Nombre de tables dans le restau
Global TableCourante ; Table sur laquelle on est en train de saisir les plats commandés

Global Dim Plats.Plat(NbPlats) ; On créé le menu
Plats(1)\Nom="Rouleaux de Printemps"
Plats(1)\Prix=5
Plats(2)\Nom="Confit de Canard"
Plats(2)\Prix=10
Plats(3)\Nom="rocamadour"
Plats(3)\Prix=15
Plats(4)\Nom="Creme Glacéé"
Plats(4)\Prix=20

Global NewList Tables.Addition() ; On se prépare à faire racker les clients

Procedure Affichage_Plats_Tables(Table)
  Define.i Compteur,Compteur2

  ; **** Recherche de la table pour laquelle on doit afficher les plats déjà commandés ****
  ForEach Tables()
    If Tables()\Table=Table
      Break
    EndIf
  Next

  ; **** Affichage des plats déjà commandés ****
  ForEach Tables()\Plats()
    Compteur+1
    SetGadgetText(Compteur+25,Plats(Tables()\Plats())\Nom)
  Next

  ; **** Effacement des lignes inutilisées ****
  Compteur+1
  For Compteur2=Compteur To 25 ; On efface les lignes inutilisés par la table
    SetGadgetText(Compteur2+25,"")
  Next
EndProcedure

Procedure Initialiser_Afficher_Table(Table.i)
  Define.i Compteur
  Define.b TableTrouvee

  SetGadgetText(0,"ADDITION TABLE "+Str(Table))
  
  ; **** Recherche si la table a déja été créée ****
  ForEach Tables()
    If Tables()\Table=Table
      TableTrouvee=#True
      Break
    EndIf
  Next  
  
  If TableTrouvee
    Affichage_Plats_Tables(Table)
  Else
    ; **** Création de la table ****
    AddElement(Tables())
    Tables()\Table=Table

    ; **** Effacement de toutes les lignes ****
    For Compteur=1 To 25
      SetGadgetText(Compteur+25,"")
    Next

    ; **** Activation du menu des plats ****
    For Compteur=1 To NbPlats
      DisableMenuItem(0,100+Compteur,#False)
    Next
  EndIf

  TableCourante=Table
EndProcedure

Procedure Ajout_Plats(Plat)
  ; **** Recherche des données de la table courante ****
  ForEach Tables()
    If Tables()\Table=TableCourante
      Break
    EndIf
  Next

  If Tables()\NbPlats>25
      MessageRequester("Hoho !!!","Vous avez assez mangé comme ça !!!")
      ProcedureReturn #False
  Else
  ; **** Ajout du plat dans la liste et affichage ****
    AddElement(Tables()\Plats())
    Tables()\Plats()=Plat
    Tables()\NbPlats+1
    SetGadgetText(Tables()\NbPlats+25,Plats(Tables()\Plats())\Nom)
  EndIf
EndProcedure

Procedure Ouverturefenetreprincipale()
  Define.i Position,Compteur,Evenmt,TypeEvenmt,Menu
  Define.b Quitter
  OpenWindow(0, 5, 5, 1260, 700, "Exemple de gestion des évènements...", #PB_Window_SystemMenu)
  ;position1 = 80  ===> Ne sert à rien
  ;numerogadget = 1 ===> Ne sert à rien
  
  ; **** Création des gadgets ****
  Position=80
  StringGadget(0,850,40,360,20,"ADDITION",#es_center)     
  For Compteur = 1 To 25
    ; compteur$ = Str(Compteur) ===> Dans ton exemple, on peut s'en passer
    StringGadget(Compteur,820,Position+(Compteur*20),20,20,Str(Compteur))
    StringGadget(Compteur+25,850,Position+(Compteur*20),360,20,"") 
  Next
  
  ; **** Création du menu des tables ****
  If CreateMenu(0,WindowID(0))
    MenuTitle("Choisir une table")
    For Compteur=1 To NbTables
      MenuItem(Compteur,"Table "+Str(Compteur))
    Next
    MenuBar()
    MenuItem(0,"Quitter")
  EndIf
  
  ; **** Création du menu des plats ****
  MenuTitle("Plats")
  For Compteur=1 To NbPlats
    With Plats(Compteur)
      MenuItem(100+Compteur,\Nom)
      DisableMenuItem(0,100+Compteur,#True)
    EndWith
  Next

  ; **** Boucle principale évènements ****
  Repeat
    Evenmt=WaitWindowEvent()
    TypeEvenmt=EventType()
    Menu=EventMenu()
    
    Select Evenmt
      Case #PB_Event_Menu
        Select Menu
          Case 0:Quitter=#True
          Case 1 To NbTables
            If Menu<>TableCourante ; Inutile de travailler pour rien
              Initialiser_Afficher_Table(Menu)
            EndIf
          Case 101 To 100+NbPlats
            Ajout_Plats(Menu-100)
        EndSelect
      Case #PB_Event_CloseWindow
        Quitter=#True
    EndSelect
    ; Ensuite, rajouter le compteur de lignes pour suspendre l'addition a 25 lignes
    ; Rajouter les procedures d'annulation de ligne ou de table et les onerror
    ; Rajouter aussi le fichier des plats saisis sur la table pour impression et sauvegarde
    ; Rajouter le compteur montant addition
    ; Rajouter le fichier memorisant la table pour rappel ou ajout sur l'addition
    ; Rajouter la procedure addition
    ; Rajouter les fichiers de gestion des stocks
    ; Rajouter les fichiers de sauvegarde
  Until Quitter=#True
  CloseWindow(0)
  End
EndProcedure

Ouverturefenetreprincipale()

Re: Deux textes différents dans une meme box.

Publié : jeu. 16/déc./2010 16:06
par bladerunner46
Bonjour,
Merci pour les conseils d'utilisation du forum.
Merci aussi pour le programme structuré. Il ne fonctionne pas. J'ai une erreur pour la ligne 116 (constant not found es_center) est-ce du à ma version démo de PB ?
Ceci dit, je suis habillé pour l'hiver. 4 pages de code à déchiffrer et à comprendre. Pour ne pas vous casser les c.. tous les deux jours, je vais commencer par étudier sur l'aide PB les commandes et fonctions que je ne connais pas.
Ensuite, je pense essayer d'écrire le même programme modifié, pour voir ce que je n'ai pas compris et qui donc ne marche pas.
En tout cas, merci à tous pour tant de gentillesse et de patience avec votre nouveau « boulet »...
Ceci dit, entrons dans le vif du sujet, concernant le programme proposé:

Le commentaire enableexplicit, kesaco ?

Je vais essayer d'assimiler les commandes « structure », « global », « global dim », et « global newlist ». C'est déjà un début.

En dehors de ça, juste une question aujourd'hui. J'envisage de pouvoir appeler une fenêtre graphique de visualisation des tables. Les tables occupées seraient des rectangles rouges, et les libres des verts. Quand on a des tables à l'intérieur et en terrasse, c'est une fonction très intéressante pour les réservations. Cela peut constituer pour moi un autre genre de tuto. Quelques pistes seront les bienvenues.

Allez, je pense que je vais encore vous embêter avant noël, mais je retrouve dans votre forum l'esprit très solidaire et un peu bidouille de l'informatique des années 70 et 80. Sympa et convivial. Si je peux faire un don pour les frais de maintenance du site, expliquez-moi comment faire, O.K. ?

Re: Deux textes différents dans une meme box.

Publié : ven. 17/déc./2010 10:51
par boddhi
Salut bladerunner46
bladerunner46 a écrit :je vais commencer par étudier sur l'aide PB les commandes et fonctions que je ne connais pas
. C'est le B.A BA ! :) Je te conseille de regarder le contenu des commandes/fonctions propres à chaque lib afin d'avoir un aperçu d'ensemble des fonctionnalités natives...
bladerunner46 a écrit :je pense essayer d'écrire le même programme modifié, pour voir ce que je n'ai pas compris et qui donc ne marche pas.
A ton aise mais ne réinvente pas la roue. Analyse le code, comprends-le et adapte-le en fonction de ton besoin spécifique... Tu gagneras du temps...
bladerunner46 a écrit :Le commentaire enableexplicit, kesaco ?
J'aurais pu enlever le ";". Enlève-le d'ailleurs, déplace ton curseur sur cette commande et appuie sur F1 et tu verras l'aide de Pb t'afficher ceci :
  • Active ou désactive le mode explicite. Quand il est actif, toutes les variables qui ne sont pas explicitement déclarées avec Define, Global, Protected ou Static ne seront pas acceptées par le compilateur et génèreront une erreur. Cela peut aider à éviter les erreurs de frappe.
bladerunner46 a écrit :Je vais essayer d'assimiler les commandes « structure », « global », « global dim », et « global newlist »
C'est important de bien maîtriser ces concepts dès le départ.
  • Structure te permet de déclarer des types personnalisés de variables (regroupement de plusieurs variables dans une seule et même variable puis accès ensuite par un nom de champ)
    Global permet de définir des variables, tableaux (Dim), listes (NewList), maps (NewMap),... dont la portée sera étendue à tout le programme et, en conséquence, à l'intérieur des procédures pour lesquelles les variables sont habituellement locales
bladerunner46 a écrit :Si je peux faire un don pour les frais de maintenance du site, expliquez-moi comment faire, O.K. ?
Achète PureBasic, c'est le meilleur don que tu puisses faire à ce forum !!!
boddhi a écrit :J'envisage de pouvoir appeler une fenêtre graphique de visualisation des tables
Une piste serait d'ouvrir une fenêtre secondaire, de dessiner tes carrés représentant les tables en utilisant les commandes de la lib "2DDrawing". Là, encore utilise l'aide pour voir le jeu de commandes disponibles. :wink:

Re: Deux textes différents dans une meme box.

Publié : ven. 17/déc./2010 11:25
par MLD
salut bladerunner46

boddhi a raison , le meilleur don que tu puisses faire, cest d'acheté PB. De toute façon un jour ou l'autre tu auras besoin d'utilser les API(S), ce qui n'est pas possible avec la version démo.

Ensuite si j'ai bien compris ce que tu veux faire c'est un logiciel de gestion de restaurant. Ce que tu n'indiques pas si c'est pour un restau particulier, ou pour une gestion de restaurants universelle ?
Car les solutions sont trés différentes.

Re: Deux textes différents dans une meme box.

Publié : ven. 17/déc./2010 14:42
par Backup
de plus un petit tour dans les Tuto du forum
c'est encore mieux :)

http://www.purebasic.fr/french/viewtopi ... =21&t=6664

voila voila :)