je rencontre un probleme avec mon code , help

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
williamm
Messages : 54
Inscription : dim. 05/sept./2004 20:21

je rencontre un probleme avec mon code , help

Message par williamm »

bonsoir
je rencontre un probleme avec mon code

quand je clique sur le bouton ajouter ma listeicon disparait

qui peux m'aider a resoudre le probleme suivant:
j'ai creer les fenetres avec visual designer
est que vous utilsez visual designer pour creer votre interface?
ou bien vous la coder entierement?

Code : Tout sélectionner


 
Enumeration
  #Window_0
   #Window_1
 
EndEnumeration
Enumeration
  #Button_Ajoutert
  #Button_Supprimer
  #ListIcon_0
EndEnumeration
Enumeration 
   #menu_Info 
  #menu_Quitter 
  #menu_vider
EndEnumeration 




Enumeration
  #Frame3D_ajouter
  
 
  #Button_ajouter1
  #Button_effacer
EndEnumeration


;- Fonts
;
Global FontID1
FontID1 = LoadFont(1, "Arial", 12, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 11, #PB_Font_Bold)
Global FontID3

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 217, 20, 807, 719,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget |  #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Gestion d'une classe ")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_Ajoutert, 10, 10, 140, 40, "Ajouter un eleve ")
      GadgetToolTip(#Button_Ajoutert, "Ajouter un nouvel eleve dans la liste")
      SetGadgetFont(#Button_Ajoutert, FontID1)
      ButtonGadget(#Button_Supprimer, 170, 10, 170, 40, "Supprimer un eleve ")
      GadgetToolTip(#Button_Supprimer, "Suprimer  eleve de la liste ")
      SetGadgetFont(#Button_Supprimer, FontID1)
      
     
      ListIconGadget(#ListIcon_0, 20, 60, 770, 640, "Nom ", 580, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines)
      AddGadgetColumn(#ListIcon_0, 2, "Prenom ", 186)
      SetGadgetFont(#ListIcon_0, FontID2)
      If CreateMenu(0,WindowID()) 
        MenuTitle( "Fichier") 
               MenuItem(#menu_Info ,"Information ") 
        MenuItem(#menu_Quitter,"Quitter ") 
        MenuTitle("Edition")
        MenuItem(#menu_vider," Vider la liste ")


EndIf
    EndIf
  EndIf
EndProcedure
Procedure Open_Window_1()
  If OpenWindow(#Window_1, 310, 35, 561, 620,  #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Ajouter un nouveau tour ")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame3D_ajouter, 10, 10, 540, 600, "")
      ButtonGadget(#Button_ajouter1, 40, 520, 150, 60, "&Ajouter ")
      GadgetToolTip(#Button_ajouter1, "ajoute un tour a la liste")
      SetGadgetFont(#Button_ajouter1, FontID1)
      ButtonGadget(#Button_effacer, 350, 520, 150, 60, "E&ffacer tout")
      GadgetToolTip(#Button_effacer, "efface  les champs ")
      SetGadgetFont(#Button_effacer, FontID1)
      
    EndIf
  EndIf
EndProcedure




open_window_0() 
Repeat 
  
 Event = WaitWindowEvent() 
 Select Event 
       
          Case #PB_EventMenu 
      Select EventMenuID() 
        
    
        Case#menu_Quitter :fermer_window_0= 1        
           EndSelect
   
         Case #PB_EventGadget  
         Select EventGadgetID() 
         Case #Button_Ajoutert:open_window_1()
       EndSelect 
    Case #PB_EventCloseWindow 
      fermer_window_0 = 1 
        
           
         
  EndSelect 
  
Until fermer_window_0 = 1 

End 


merci de m'aider


Williams
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il faut que tu mettes tous les gadgets dans le même "Enumeration", sinon, tu risques d'avoir des conflits.

Code : Tout sélectionner

Enumeration 
  #Button_Ajoutert 
  #Button_Supprimer 
  #ListIcon_0 
EndEnumeration

Enumeration 
  #Frame3D_ajouter 
  #Button_ajouter1 
  #Button_effacer 
EndEnumeration
Regroupe tout ça dans le même

Code : Tout sélectionner

Enumeration 
  #Button_Ajoutert 
  #Button_Supprimer 
  #ListIcon_0 
  #Frame3D_ajouter 
  #Button_ajouter1 
  #Button_effacer 
EndEnumeration
williamm
Messages : 54
Inscription : dim. 05/sept./2004 20:21

Message par williamm »

merci chris

ca marche

alors quand a plusieurs gadgets pour plusieurs fenetre
il faut les regrouper ensemble dans une meme enumration?


merci chris


williamm
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je te poste le code modifié avec les commentaires.
J'ai fait quelques modifications concernant la gestion de tes fenêtres.

Code : Tout sélectionner

Enumeration 
  #Window_0 
  #Window_1  
EndEnumeration 

;Toutes les identifiants des Gadgets doivent se déclarer les uns à la suite des autres
;dans la même énumération même si elles appartiennent à des fenêtres différentes,
;car chaque Gadget doit avoir un numéro unique.

Enumeration 
  #Button_Ajoutert 
  #Button_Supprimer 
  #ListIcon_0 
  #Frame3D_ajouter 
  #Button_ajouter1 
  #Button_effacer 
EndEnumeration
 
Enumeration 
  #menu_Info 
  #menu_Quitter 
  #menu_vider 
EndEnumeration 


;- Fonts 
; 
Global FontID1 
FontID1 = LoadFont(1, "Arial", 12, #PB_Font_Bold) 
Global FontID2 
FontID2 = LoadFont(2, "Arial", 11, #PB_Font_Bold) 
Global FontID3 


;Si l'utilisateur est amené à gérer qu'une seule fenêtre à la fois, il est préférable
;de gérer les évènements séparémment pour chaque fenêtre.

Procedure Open_Window_1() 
  If OpenWindow(#Window_1, 310, 35, 561, 620,  #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Ajouter un nouveau tour ") 
    If CreateGadgetList(WindowID()) 
      Frame3DGadget(#Frame3D_ajouter, 10, 10, 540, 600, "") 
      ButtonGadget(#Button_ajouter1, 40, 520, 150, 60, "&Ajouter ") 
      GadgetToolTip(#Button_ajouter1, "ajoute un tour a la liste") 
      SetGadgetFont(#Button_ajouter1, FontID1) 
      ButtonGadget(#Button_effacer, 350, 520, 150, 60, "E&ffacer tout") 
      GadgetToolTip(#Button_effacer, "efface  les champs ") 
      SetGadgetFont(#Button_effacer, FontID1)  
    EndIf
    
    Repeat  
      event = WaitWindowEvent() 
      Select event  
        Case #PB_EventGadget  
          Select EventGadgetID() 
            Case #Button_ajouter1
              fermer_window_0 = 1  
          EndSelect 
          
        Case #PB_EventCloseWindow 
          fermer_window_0 = 1 
          
      EndSelect 
    Until fermer_window_0 = 1 
    CloseWindow(#Window_1)
  EndIf 
EndProcedure 


; Ta fenêtre principale, ce n'est pas la peine de la mettre dans une procédure

If OpenWindow(#Window_0, 217, 20, 807, 719,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget |  #PB_Window_TitleBar | #PB_Window_BorderLess | #PB_Window_ScreenCentered , "Gestion d'une classe ") 
  If CreateGadgetList(WindowID()) 
    ButtonGadget(#Button_Ajoutert, 10, 10, 140, 40, "Ajouter un eleve ") 
    GadgetToolTip(#Button_Ajoutert, "Ajouter un nouvel eleve dans la liste") 
    SetGadgetFont(#Button_Ajoutert, FontID1) 
    ButtonGadget(#Button_Supprimer, 170, 10, 170, 40, "Supprimer un eleve ") 
    GadgetToolTip(#Button_Supprimer, "Suprimer  eleve de la liste ") 
    SetGadgetFont(#Button_Supprimer, FontID1) 
    
    ListIconGadget(#ListIcon_0, 20, 60, 770, 640, "Nom ", 580, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines) 
    AddGadgetColumn(#ListIcon_0, 2, "Prenom ", 186) 
    SetGadgetFont(#ListIcon_0, FontID2) 
    If CreateMenu(0,WindowID()) 
      MenuTitle( "Fichier") 
      MenuItem(#menu_Info ,"Information ") 
      MenuItem(#menu_Quitter,"Quitter ") 
      MenuTitle("Edition") 
      MenuItem(#menu_vider," Vider la liste ") 
    EndIf 
  EndIf 
  
  Repeat  
    event = WaitWindowEvent() 
    Select event 
      Case #PB_EventMenu 
        Select EventMenuID() 
          Case#menu_Quitter :fermer_window_0= 1        
        EndSelect 
        
      Case #PB_EventGadget  
        Select EventGadgetID() 
          Case #Button_Ajoutert:Open_Window_1() 
        EndSelect
 
      Case #PB_EventCloseWindow 
        fermer_window_0 = 1 
        
    EndSelect 
  Until fermer_window_0 = 1 
EndIf 
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Oui, quand les gadgets sont gérés par la même boucle, il faut que leurs index soient différents.

Ou alors, tu peux faire comme ça, mais ça n'a pas grand intérêt:

Code : Tout sélectionner

Enumeration 
  #Button_Ajoutert 
  #Button_Supprimer 
  #ListIcon_0
EndEnumeration 

Enumeration
  #Frame3D_ajouter =3
  #Button_ajouter1 
  #Button_effacer 
EndEnumeration
Dans ce cas, ton Frame3D aura l'index 3, et les autres auront les suivants
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

C'est comme ceci qui faut faire selon les règles de l'art.

Code : Tout sélectionner

Enumeration
  #Button_Ajoutert
  #Button_Supprimer
  #ListIcon_0
EndEnumeration

Enumeration #PB_Compiler_EnumerationValue
  #Frame3D_ajouter 
  #Button_ajouter1
  #Button_effacer
EndEnumeration
Comme ça si on ajoute des constantes dans la première énumeration, on ne sera pas obligé de modifier la valeur dans la seconde énumération. Le compilateur va le faire tout seul comme un grand.

A+
Guimauve
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Reste encore à savoir quel gain ça peut apporter d'aller mettre les gadgets dans plusieurs enumerations, quand ils sont traités par la même boucle.

Personnellement, je n'en vois aucun, mais si quelqu'un a une explication, je suis preneur.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:) Salut,
@ Williamm... avec deux m
Un petit bout de code pour te faire avancer dans ton programme.
Je m'en fait un du même genre, donc je vais tâcher de t'en
faire profiter. C'est pas l'idéal, mais tu auras une petite BDD, facile à gérer.

Code : Tout sélectionner

Procedure Open_Window_0()
 
  If OpenWindow(#Window_0 , 216, 0, 782, 350,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "GESTION DE LISTES") 
   ; remarques que j'ai changé la taille de la fenêtre, j'ai pas d'écran d'un mètre de haut !
    If CreateGadgetList(WindowID()) 
      
     ListIconGadget(#ListIcon_0, 10, 10, 760, 300, "Nom", 120, #PB_ListIcon_CheckBoxes | #PB_ListIcon_GridLines) 
      ;SetGadgetFont(#ListIcon_0, FontID1)
      AddGadgetColumn(#ListIcon_0, 2, "Prenom ", 120); ajout d'une colonne
      AddGadgetColumn(#ListIcon_0, 3, "Né(e) le ", 80);ajout d'une autre colonne
      AddGadgetColumn(#ListIcon_0, 4, "Lieu de naissance ", 120);etc...
      AddGadgetColumn(#ListIcon_0, 5, "Renseignements ", 350) ; c'est mieux de séparer les infos
      
      If CreateMenu(0,WindowID()) 
      MenuTitle( "Fichier") 
      MenuItem (#menu_Ajouter ,"Ajouter un eleve ")
      MenuItem(#supprimer,"Supprimer") 
      MenuItem(#menu_Info ,"Information ") 
      MenuItem(#menu_Quitter,"Quitter ")
      
      MenuTitle( "Edition")
      MenuItem(#Enregistrer,"Enregistrer"); < pour enregistrer ta liste
      MenuItem(#Ouvrir,"Ouvrir"); < pour l'ouvrir
      
      EndIf
      
      If CreateStatusBar(#StatusBar, WindowID()) ; info en bas de fenêtre
       AddStatusBarField(90)
       AddStatusBarField(40) 
      EndIf 
      StatusBarText(#StatusBar, 0, "Nombre d'inscrits",#PB_StatusBar_Raised)
      StatusBarText(#StatusBar, 1, ""+ Str(CountGadgetItems(#ListIcon_0))); ici on compte le nombre d'élèves de la liste
      
    EndIf 
  EndIf 
   Ouvrir_Fichier_Texte() ; pour que tu sélectionne une liste (si tu en as plusieurs) dès l'ouverture de ton programme
  StatusBarText(#StatusBar, 1, ""+ Str(CountGadgetItems(#ListIcon_0))); actualisation de la statusbar au chargement de la liste
EndProcedure 
Ce qui suit sert à créer un fichier avec ta liste
afin que tu puisses la conserver et la relire dans ton ListIconGadget

Code : Tout sélectionner

Procedure Creation_Fichier_Texte()
  Fichier.s = SaveFileRequester("Enregistrer une liste ","Dossier Elèves\ ","Fichier texte |*.txt", 0)
  If Fichier = ""     
  Else   
    If GetExtensionPart(Fichier) = ""  
      Fichier = Fichier + ".txt"
    EndIf    
    document.s = GetFilePart(Fichier.s)
    EnregistreFichier = #True
    If FileSize(Fichier.s)>0 
      Reponse = MessageRequester("Cette liste existe déjà !","Voulez vous remplacer la liste :  "  + document +  " ? "+ Chr(13) +" S'il sagit d'une mise à jour, cliquez sur OK "+ Chr(13) +" Si c'est une erreur cliquez sur NON " ,#PB_MessageRequester_YesNo ) 
      If Reponse = 6
        a$ + "Yes"
      ElseIf Reponse = 7
        a$ + "No"
      Else 
        a$ + "Cancel"
        
        If Reponse <> 6 
          EnregistreFichier = #False 
        EndIf 
      EndIf
    EndIf 
  EndIf 
  
  If EnregistreFichier 
    If CreateFile(0,Fichier.s)
      NombreEleves = CountGadgetItems(#ListIcon_0)
      For n = 0 To NombreEleves - 1
        Texte.s = GetGadgetItemText(#ListIcon_0,n,0); renvoi de la première colonne...
        Texte1.s = GetGadgetItemText(#ListIcon_0,n,1) ;renvoi de la deuxième...
        Texte2.s = GetGadgetItemText(#ListIcon_0,n,2); etc...
        Texte3.s = GetGadgetItemText(#ListIcon_0,n,3)
        Texte4.s = GetGadgetItemText(#ListIcon_0,n,4) 
        WriteStringN(Texte+ Chr(10) +Texte1+ Chr(10) +Texte2+ Chr(10) +Texte3+ Chr(10) +Texte4) ; Là tu écris chaque élément de chaque colonne à la suite, pour pouvoir les relire dans l'ordre, et donc les remettre dans leur colonne respective quand tu ouvriras ta liste.
      Next 
      CloseFile(0) 
    EndIf            
  EndIf 
EndProcedure 
Maintenant la procedure pour ouvrir ta liste enregistrée et l'envoyer dans ton ListIconGadget ( Chaque élément devant retrouver sa place, sinon ça fait con.)

Code : Tout sélectionner

Procedure Ouvrir_Fichier_Texte()
 ClearGadgetItemList(#ListIcon_0) ; pour vider le ListIcon si une liste s'y trouve déjà, et mettre la nouvelle à la place
  Fichier.s = OpenFileRequester("Charger la liste", "Dossier Elèves\ ", "Fichiers Textes|*.txt", 0)
  If Fichier <> ""
    If OpenFile(#fichier_texte, Fichier); si le fichier est ouvert...
      Repeat
        Texte.s = ReadString() ; lecture des infos de ton fichier
        Texte1.s = ReadString(); de chaque élément
        Texte2.s = ReadString() ; de chaque ligne...
        Texte3.s = ReadString()
        Texte4.s = ReadString()
;Envoi de chaque élément lu dans ton ListIcon et à la bonne place !
        AddGadgetItem(#ListIcon_0, -1 ,Texte+ Chr(10) +Texte1+ Chr(10) +Texte2+ Chr(10) +Texte3+ Chr(10) +Texte4) ; le chr(10) change de colonne
      Until Eof(#fichier_texte) ; until end of file...
      CloseFile(#fichier_texte); on ferme
    EndIf
  EndIf
  StatusBarText(#StatusBar, 1, ""+ Str(CountGadgetItems(#ListIcon_0))); ré initialisation du compteur de la statusbar...
EndProcedure
Ah oui, j'allais oublier quelques bricoles :

Code : Tout sélectionner

Case #PB_EventGadget 
            GadgetID = EventGadgetID() 
            If GadgetID = #Button_ajouter 
              ;Fermer_Window_1 = 1
              item_add()
              StatusBarText(#StatusBar, 1, ""+ Str(CountGadgetItems(#ListIcon_0))) ; compte à chaque fois que tu ajoutes un élève.
            EndIf 
Tu ajoutes ce qui suit après tes Enumerations :

Code : Tout sélectionner

Declare.s ApplicationDir()
Declare Creation_Fichier_Texte()
Declare Ouvrir_Fichier_Texte()

;creations des directory
If ExamineDirectory(0, "Dossier Elèves", "") = 0
  CreateDirectory("Dossier Elèves")
EndIf
appli_dir$=ApplicationDir()
Et puis ça pour créer ton dossier Elèves avec ton appli
(Code de Régis, le plus connu des Soldats inconnus)

Code : Tout sélectionner

Procedure.s ApplicationDir()
  appdir$ = Space(255)
  GetCurrentDirectory_(255, @appdir$)
  If Right(appdir$, 1) <> "\" ; si l'adresse ne finit pas par "\"
    appdir$ = appdir$ + "\" ; on rajoute le "\"
  EndIf
  ProcedureReturn appdir$
EndProcedure
En fignolant tu devrais pas être loin du 20/20 avec ton prof.
Bon j'ai pas tout commenté mais tu devrais y arriver.
Sinon demande et si je repasse par là on verra, sinon tu as les autres bandits de ce forum qui se feront une joie. :mrgreen:

@+ Jacobus
williamm
Messages : 54
Inscription : dim. 05/sept./2004 20:21

Message par williamm »

merci beaucoup Jacobus

tu es cool


merci merci



Williamm
Répondre