qu'est-ce qui ne va pas dans mon programme

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
france

qu'est-ce qui ne va pas dans mon programme

Message par france »

coucou

est-ce que quelqu'un pourrait me donner un coup de main, et medire ce qui ne va pas ?



;parametres de window

#menu=0
#inserer=1
#recapitulatif=14




;parametres des bouton

#nouveau=2
#titre = 3
#acteur1=4
#realisateur=5
#acteur2=6
#acteur3=7
#duree=8
#origine=9
#annee=10
#producteur=11
#resume=12
#sauvegarder=13
#quitter=15

Global titre$,acteur1$,realisateur$,acteur2$,acteur3$,duree$,origine$,annee$

;ouverture des procedures

;ouverture de la page de menu
Declare recapitulatif()

Procedure menu()

If OpenWindow(#menu,0,0,200,200,#pb_window_systemmenu|#pb_window_windowcentered,"catalogue dvd")

If CreateGadgetList(WindowID())

ButtonGadget(#nouveau,0,10,200,20,"inserer un nouveau film")

EndIf

EndIf

EndProcedure

;on ouvre la nouvelle fiche video

Procedure fiche()

If OpenWindow(#inserer,0,0,800,700,#pb_window_systemmenu|#pb_window_windowcentered,"fiche video")

If CreateGadgetList(WindowID())

ButtonGadget(#titre,10,50,280,20,"titre du film")
ButtonGadget(#realisateur,10,80,280,20,"nom du realisateur")
ButtonGadget(#acteur1,10,110,280,20,"acteur 1")
ButtonGadget(#acteur2,10,140,280,20,"acteur 2")
ButtonGadget(#acteur3,10,170,280,20,"acteur 3")
ButtonGadget(#duree,10,200,280,20,"duree du film")
ButtonGadget(#origine,10,230,280,20,"origine du film")
ButtonGadget(#annee,10,260,280,20,"annee de creation")
ButtonGadget(#producteur,10,290,280,20,"producteur")
StringGadget(#resume,10,400,780,250,"",#pb_string_multiline|#pb_string_uppercase)
ButtonGadget(#sauvegarder,290,670,280,20,"voulez-vous sauvegarder votre fiche")

EndIf

EndIf
Structure video


titre.s
realisateur.s
acteur1.s
acteur2.s
acteur3.s
duree.s
origine.s
annee.s
producteur.s

EndStructure

NewList fichevideo.video()

For a =1 To 9
Read titre$
Read realisateur$
Read acteur1$
Read acteur2$
Read acteur3$
Read duree$
Read origine$
Read annee$
Read producteur$
AddElement(fichevideo())
fichevideo()\titre = titre$
fichevideo()\realisateur=realisateur$
fichevideo()\acteur1=acteur1$
fichevideo()\acteur2=acteur2$
fichevideo()\acteur3=acteur3$
fichevideo()\duree=duree$
fichevideo()\origine=origine$
fichevideo()\annee=annee$
fichevideo()\producteur=producteur$
Next a



fiche$="fichevideo.dat"
If CreateFile(0,fiche$)
ForEach fichevideo()
WriteStringN(fichevideo()\titre)
WriteStringN(fichevideo()\realisateur)
WriteStringN(fichevideo()\acteur1)
WriteStringN(fichevideo()\acteur2)
WriteStringN(fichevideo()\acteur3)
WriteStringN(fichevideo()\duree)
WriteStringN(fichevideo()\origine)
WriteStringN(fichevideo()\annee)
WriteStringN(fichevideo()\producteur)
Next
CloseFile(0)

endif



If LoadFont(0,"arial",16)
SetGadgetFont(#pb_default,FontID())
EndIf

TextGadget(#inserer,400,5,280,30,"CREATION D'UNE FICHE VIDEO",#pb_text_border|#pb_text_center)
TextGadget(#inserer,200,360,390,30,"Saisissez le résumé du film",#pb_text_border|#pb_text_center)

Repeat

event=WaitWindowEvent()

If event = #pb_eventgadget
Select EventGadgetID()



Case #titre


titre$=InputRequester("saisissez le titre du film","","")
SetGadgetFont(#pb_default,#pb_default)
TextGadget(#inserer,350,50,200,50,"Le titre du film est : ")
TextGadget(#inserer,650,50,100,20,titre$)
Case #realisateur

realisateur$=InputRequester("saisissez le nom du realisateur","","")
TextGadget(#inserer,350,80,280,50,"Le nom du réalisateur est : ")
TextGadget(#inserer,650,80,280,50,realisateur$)

Case #acteur1

acteur1$=InputRequester("saississez le nom du premier acteur","","")
TextGadget(#inserer,350,110,280,50,"Avec entre autre : ")
TextGadget(#inserer,650,110,280,50,acteur1$)

Case #acteur2

acteur2$=InputRequester("saisissez le nom du second acteur","","")
TextGadget(#inserer,650,140,280,20,acteur2$)

Case #acteur3
acteur3$=InputRequester("saisissez le nom du troisieme acteur","","")
TextGadget(#inserer,650,170,280,20,acteur3$)

Case #duree
duree$=InputRequester("saisissez la duree du film","","")
TextGadget(#inserer,350,200,280,20,"La durée du film est de : ")
TextGadget(#inserer,650,200,280,20,duree$+" minutes")

Case#origine
origine$=InputRequester("saisissez l'origine du film","","")
TextGadget(#inserer,350,230,280,20,"L'origine du film est : ")
TextGadget(#inserer,650,230,280,20,origine$)


Case#annee

annee$=InputRequester("saisissez l'année de création","","")
TextGadget(#inserer,350,250,280,20,"Le film a été crée en :")
TextGadget(#inserer,650,250,280,20,annee$)

Case#producteur
producteur$=InputRequester("saisissez le nom du producteur","","")
TextGadget(#inserer,350,280,280,20,"Le producteur de "+titre$+" est :")

TextGadget(#inserer,650,280,280,20,producteur$)


Case#sauvegarder
recapitulatif()

EndSelect


EndIf

Until event =#pb_eventclosewindow

EndProcedure


Procedure recapitulatif()

HideWindow(#inserer,1)
If OpenWindow(#recapitulatif,0,0,800,700,#pb_window_systemmenu|#pb_window_windowcentered,"RECAPITULATIF DE LA FICHE VIDEO DE "+titre$)
If CreateGadgetList (WindowID())

TextGadget(#recapitulatif,400,5,280,20,titre$)
ButtonGadget(#quitter,10,650,280,20,"quitter")

EndIf
EndIf

Repeat
event=WaitWindowEvent()
If event=#pb_eventgadget


Select EventGadgetID()


Case#quitter
CloseWindow(#recapitulatif)
ProcedureReturn fiche()



EndSelect


EndIf









Until event = #pb_eventclosewindow




EndProcedure



;on lance le programme

menu()

Repeat

event = WaitWindowEvent()

If event=#pb_eventgadget

Select EventGadgetID()

Case #nouveau

CloseWindow(#menu)
fiche()



EndSelect


EndIf



Until event =#pb_eventclosewindow



End
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Tu lui dire d'aller lire les data avec la commande read, seulement tu n'as pas mis de data.Il y a plusieures autres choses qui permettraient de te simplifier la vie :

Code : Tout sélectionner

;parametres de window 

#menu=0 
#inserer=1 
#recapitulatif=14 




;parametres des bouton 

#nouveau=2 
#titre = 3 
#acteur1=4 
#realisateur=5 
#acteur2=6 
#acteur3=7 
#duree=8 
#origine=9 
#annee=10 
#producteur=11 
#resume=12 
#sauvegarder=13 
#quitter=15 
Peut être remplacé par :

Code : Tout sélectionner

;parametres de window 
Enumeration
#menu 
#inserer 
#recapitulatif 
  ; parametres des bouton 
#nouveau
#titre
#acteur1
#realisateur 
#acteur2
#acteur3 
#duree 
#origine 
#annee 
#producteur 
#resume 
#sauvegarder 
#quitter
EndEnumeartion
Autre chose :

Code : Tout sélectionner

Structure video 
titre.s 
realisateur.s 
acteur1.s 
acteur2.s 
acteur3.s 
duree.s 
origine.s 
annee.s 
producteur.s 
EndStructure 

NewList fichevideo.video() 
Place le tout au début de ton code après les constantes car sinon, au 2ème appel, il y aura une erreur car tu ne peux pas le créer une 2ème fois.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour
Tu n'as pas mis de Data alors que tu utilise READ !
Denis

Bonne Jounée à tous
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Désolé Oliv tu as du répondre quelques secondes avant moi, lol !
Denis

Bonne Jounée à tous
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Je ne connais pas grand chose aux applications , je ne te serai donc pas d'un grand secours , cependant , tu devrais essayer de ne faire qu'une seule boucle pour commencer , enfin , je ne sais pas ce qu'en pense ceux qui pratiquent ce genre de prog ??

et décomposer un peu plus
par exemple faire une procédure qui se chargera uniquement de la sauvegarde dans un fichier

Code : Tout sélectionner

Procedure SauveFiche()
   fiche$="fichevideo.dat" 
   If CreateFile(0,fiche$) 
      ForEach fichevideo() 
         WriteStringN(fichevideo()\titre)  
         WriteStringN(fichevideo()\realisateur) 
         WriteStringN(fichevideo()\acteur1) 
         WriteStringN(fichevideo()\acteur2) 
         WriteStringN(fichevideo()\acteur3) 
         WriteStringN(fichevideo()\duree) 
         WriteStringN(fichevideo()\origine) 
         WriteStringN(fichevideo()\annee) 
         WriteStringN(fichevideo()\producteur) 
       Next 
      CloseFile(0) 
   endif
EndProcedure


une autre procedure qui ne fera que la lecture du fichier
une procedure qui s'occupe de la mise en page des données
etc

et tu devrais pouvoir appeler toutes ces procedures depuis la boucle principale .

Dans un premier temps rédige l'organisation que tu veux

Par exemple

Ajouter fiche
Modifier une fiche
Supprimer une fiche
Trier les fiches par titre , Année , etc ...

en décomposant ainsi , tu verras peut-être que tu peux faire une procédure pour chaque tâche .
et ensuite ,restera à organiser le programme pour les appeler au bon moment :)

autre procedure possibles

Code : Tout sélectionner

Procedure NouvelleFiche()
   AddElement(fichevideo())
   ;ici tu effaces tes TextGadget , mais il faudrait un No unique par TextGadget ( et de préférence prends des stringgadget)
   SetGadgetText(#Gadget, "") 
   ;et ainsi de suite pour tous les gadgets
EndProcedure

Procedure EnregistreFiche()
   ;ici tu copies le contenu des gadgets dans la liste chainée
   fichevideo()\Titre$ = GetGadgetText(#GadgetTitre) 
   ;etc
EndProcedure  

et regarde aussi du côté des autres gadgets

par exemple , teste ce bout de code issu de l'aide
je trouve que les stringgadget sont plus adaptés que le inputrequester()

Code : Tout sélectionner

  ; Shows possible flags of StringGadget in action... 
  If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0)) 
   StringGadget(0,8, 10,306,20,"Normal StringGadget...") 
   StringGadget(1,8, 35,306,20,"1234567",#PB_String_Numeric) 
   StringGadget(2,8, 60,306,20,"Readonly StringGadget",#PB_String_ReadOnly) 
   StringGadget(3,8, 85,306,20,"lowercase...",#PB_String_LowerCase) 
   StringGadget(4,8,110,306,20,"uppercase...",#PB_String_UpperCase) 
   StringGadget(5,8,140,306,20,"Borderless StringGadget",#PB_String_BorderLess) 
   StringGadget(6,8,170,306,20,"Password",#PB_String_Password) 
   StringGadget(7,8,205,306,60,"Multiline StringGadget..."+Chr(13)+Chr(10)+"second line...",#PB_String_MultiLine) 
   Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf 
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Petite question, qu'est-ce que tu veux faire avec ça ?

Code : Tout sélectionner

Case #duree 
duree$=InputRequester("saisissez la duree du film","","") 
TextGadget(#inserer,350,200,280,20,"La durée du film est de : ") 
TextGadget(#inserer,650,200,280,20,duree$+" minutes") 
La déduction que j'ai est que tu faire afficher la durée du film dans la fenètre de ton programme.

Je vais te coder un exemple de comment je ferais si j'étais toi.

A+
Guimauve
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

L'interface complète comme moi je la ferais. J'ai mis un ListViewGadget() pour avoir la liste des films et un EditorGadget() pour faire afficher les informations sur le film sélectionné.

J'ai eu le temps de complèter ce matin (vous avez 5-6 heures d'avance sur moi), je dois me préparer pour aller travailler. Mais tu peux étudier ce source et me poser des questions.

A+
Guimauve

Code : Tout sélectionner

; Constantes pour les fenètres du programme

Enumeration
     #Catalogue_film
     #Information_film
EndEnumeration

; Constantes pour les Gadgets du programme
Enumeration
     
     ; Constante pour la fenetre principale
     #Texte_Liste_de_film
     #Listview_Liste_de_film
     #Texte_Information
     #Editor_Information
     #Button_Ajouter
     #Button_Quitter
     #Texte_version_programme
     
     ; Constante pour la fenètre de saisie des infos
     #Text_0
     #Text_1
     #Text_2
     #Text_3
     #Text_4
     #Text_5
     #Text_6
     #Text_7
     #Text_8
     #String_0
     #String_1
     #String_2
     #String_3
     #String_4
     #String_5
     #String_6
     #String_7
     #String_8
     #Button_0
     #Button_1
EndEnumeration

Global titre$, acteur1$, realisateur$, acteur2$, acteur3$, duree$, origine$, annee$, producteur$

Declare Film_Input_Requester()

; Fenètre principale

If OpenWindow(#Catalogue_film, 216, 0, 472, 354, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered, "Catalogue de film")
     If CreateGadgetList(WindowID())
     
          TextGadget(#Texte_Liste_de_film, 10, 10, 220, 20, "Liste de film du catalogue", #PB_Text_Center)
          ListViewGadget(#Listview_Liste_de_film, 10, 30, 220, 260)
          TextGadget(#Texte_Information, 240, 10, 220, 20, "Information sur le film selectionné", #PB_Text_Center)
          EditorGadget(#Editor_Information, 240, 30, 220, 260)
          ButtonGadget(#Button_Ajouter, 200, 310, 120, 30, "Ajouter un film")
          ButtonGadget(#Button_Quitter, 340, 310, 120, 30, "Quitter")
          TextGadget(#Texte_version_programme, 10, 320, 170, 20, "Catalogue de film version 1.0 Beta", #PB_Text_Center)
          
     EndIf
EndIf

Repeat
     
     EventID = WaitWindowEvent()
     
     If EventID = #PB_EventGadget
          Select EventGadgetID() ; La gestion des évenements
                    
               Case #Button_Ajouter
                    HideWindow(#Catalogue_film, 1)
                    Film_Input_Requester()
                    HideWindow(#Catalogue_film, 0)
                    
               Case #Button_Quitter
                    ; L'utilisateur à terminer on ferme le programme
                    EventID = #PB_EventCloseWindow
                    
          EndSelect
     EndIf
Until EventID = #PB_EventCloseWindow

End


Procedure Film_Input_Requester()
     If OpenWindow(#Information_film, 216, 0, 343, 333, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_WindowCentered, "Information pour le film")
          If CreateGadgetList(WindowID())
               TextGadget(#Text_0, 10, 10, 90, 20, "Titre du film :")
               TextGadget(#Text_1, 10, 40, 90, 20, "Réalisateur :")
               TextGadget(#Text_2, 10, 70, 90, 20, "Premier acteur :")
               TextGadget(#Text_3, 10, 100, 90, 20, "Deuxième acteur :")
               TextGadget(#Text_4, 10, 130, 90, 20, "Troisième acteur :")
               TextGadget(#Text_5, 10, 160, 90, 20, "Durée :")
               TextGadget(#Text_6, 10, 190, 90, 20, "Origine :")
               TextGadget(#Text_7, 10, 220, 90, 20, "Année :")
               TextGadget(#Text_8, 10, 250, 90, 20, "Producteur :")
               StringGadget(#String_0, 100, 10, 210, 20, "")
               StringGadget(#String_1, 100, 40, 210, 20, "")
               StringGadget(#String_2, 100, 70, 210, 20, "")
               StringGadget(#String_3, 100, 100, 210, 20, "")
               StringGadget(#String_4, 100, 130, 210, 20, "")
               StringGadget(#String_5, 100, 160, 210, 20, "")
               StringGadget(#String_6, 100, 190, 210, 20, "")
               StringGadget(#String_7, 100, 220, 210, 20, "")
               StringGadget(#String_8, 100, 250, 210, 20, "")
               ButtonGadget(#Button_0, 30, 290, 120, 30, "Terminer")
               ButtonGadget(#Button_1, 190, 290, 120, 30, "Annuler")
               
          EndIf
          
          Repeat
               
               EventID = WaitWindowEvent()
               
               If EventID = #PB_EventGadget
                    Select EventGadgetID() ; La gestion des évenements
                              
                         Case #Button_0
                              ; L'utilistateur à terminer la saisie des informations
                              titre$ = GetGadgetText(#String_0)
                              acteur1$ = GetGadgetText(#String_1)
                              realisateur$ = GetGadgetText(#String_2)
                              acteur2$ = GetGadgetText(#String_3)
                              acteur3$ = GetGadgetText(#String_4)
                              duree$ = GetGadgetText(#String_5)
                              origine$ = GetGadgetText(#String_6)
                              annee$ = GetGadgetText(#String_7)
                              producteur$ = GetGadgetText(#String_8)
                              ; On a mémorisé toute les informations utiles
                              ; on ferme la fenetre.
                              EventID = #PB_EventCloseWindow
                              
                         Case #Button_1
                              ; L'utilisateur à changer d'idée, on ferme la fenètre
                              EventID = #PB_EventCloseWindow
                              
                    EndSelect
               EndIf
          Until EventID = #PB_EventCloseWindow
          
     EndIf
     ; On ferme la Fenètre pour la saisie des informations d'un film
     CloseWindow(#Information_film)
EndProcedure
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Code : Tout sélectionner

   ; Constante pour la fenètre de saisie des infos 
     #Text_0 
     #Text_1 
     #Text_2 
     #Text_3 
     #Text_4 
     #Text_5 
     #Text_6 
     #Text_7 
     #Text_8 
     #String_0 
     #String_1 
     #String_2 
     #String_3 
     #String_4 
     #String_5 
     #String_6 
     #String_7 
     #String_8 
     #Button_0 
     #Button_1 
EndEnumeration
Ce genre de constantes ne sert à rien car c'est inutile de mettre des constantes si elle ne permettent pas de différencier les gadgets metre plutôt #Texte_Acteur1 ou #T_Acteur1, #Boutton_Acteur1 ......
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Bosse bien :lol:
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Ce genre de constantes ne sert à rien car c'est inutile de mettre des constantes si elle ne permettent pas de différencier les gadgets metre plutôt #Texte_Acteur1 ou #T_Acteur1, #Boutton_Acteur1 ......
C'est la faute de Visual Designer, et j'ai fait ça sur le gros gaz.

:twisted: :twisted: :twisted:

C'est vrai que c'est pas faicle de se repérer avec des constantes numérotées.

A+
Guimauve
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

C'est la faute de Visual Designer
On peu choisir le nom de la constante sous Visual Designer :wink:
france
Messages : 7
Inscription : mer. 10/mars/2004 0:14

Message par france »

merci beaucoup, je vais bosser et voir ce que je peux faire

en tout cas, c'est super
je mettrai le programme apres les rectifications pour que vous me donnier votre avis

merci a tous
Répondre