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 !!
arrête avec ta console ; on est plus en 1981 !!

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
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

) :
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.

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
