probleme avec ce code(de l'aide s'il vous plait)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

probleme avec ce code(de l'aide s'il vous plait)

Message par SpaceMan »

salut a vous les problemes j'en ai pas mal les voici
1. Mise à jour des numeros se fait avec une repetition avant de continuer normalement.
2. Pour supprimer une seule ligne juste apres l'enrgistrement, toutes les autres lignes enregistrées
3. Sont effacées.
4. quand on efface une ligne du milieu les suivantes ne sont pas mises jour(les numeros)

voici mon code:

Code : Tout sélectionner

;-Declarations 
;  Constantes 
#INormal = 0 
Enumeration ; Gadgets 
#liste
#Numero_Biblio
#NomCD_Biblio
#CategorieCD_Biblio
#MarqueCD_Biblio
#Modifier
#frame
#Bouton_enregistrer
#NomCD
#MarqueCD
#combo 
#strG 
#strG_2 
#quitter 
#Quitter_2
#text_NomCD
#text_Categorie
#text_MarqueCD
EndEnumeration 

Enumeration ; Menus 
  #Enregistrer
  #Supprimer 
  #Enregistrement
  #Apropos
EndEnumeration
#FICHIER1 = "C:\Test2.bib"
Global n.l
; Structures 
Structure Biblio 
  Numero.s
  NomCD.s
  CategorieCD.s
  MarqueCD.s 
EndStructure 
; Listes 
NewList items.Biblio()

n + 1
;sauvegarde des donneés dans la liste et dans un fichier
Procedure.b Sauver()
If  AddElement(items()) 
    items()\Numero=GetGadgetText(#liste)
    items()\NomCD=GetGadgetText(#NomCD) 
    items()\CategorieCD=GetGadgetText(#combo) 
    items()\MarqueCD=GetGadgetText(#MarqueCD)
  AddGadgetItem(#liste,-1,Str(n)+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD) 
EndIf  
 If CreatePreferences("c:\Test.bib");creation et ecriture dans le ficher "c:\Test.bib"
   n = 0 
    ForEach items() 
      n + 1
      PreferenceComment("enregistrement N°"+ Str(n)) ;puis utiliser cette commande ?
      PreferenceComment("                                       ") 
      WritePreferenceString(Str(n) + "-Numero", Str(n)) 
      WritePreferenceString(Str(n) + "-NomCD", items()\NomCD) 
      WritePreferenceString(Str(n) + "-CategorieCD", items()\CategorieCD) 
      WritePreferenceString(Str(n) + "-MarqueCD", items()\MarqueCD)
      PreferenceComment("                                       ")
      
    Next 
    ClosePreferences() 
 EndIf
ProcedureReturn 1
EndProcedure

;pour charger la liste de mes enregistrements
Procedure Charger() 
  OpenPreferences("c:\Test.bib") 
  n = 0 
  Repeat 
    n + 1 
    Numero.s = ReadPreferenceString(Str(n) + "-Numero", "") 
     If Numero 
      AddElement(items()) 
      items()\Numero = ReadPreferenceString(Str(n)+"-Numero","")   
      items()\NomCD = ReadPreferenceString(Str(n) + "-NomCD","")
      items()\CategorieCD = ReadPreferenceString(Str(n) + "-CategorieCD","")
      items()\MarqueCD = ReadPreferenceString(Str(n) + "-MarqueCD","")
      AddGadgetItem(#liste,-1,items()\Numero+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD)
  EndIf
  Until Numero = ""
 ClosePreferences()
EndProcedure

; effacer un element de la liste et du fichier(entre autre reecrire le fichier)
Procedure supprimer()
;n=1
  If GetGadgetState(#liste) < 1
  SelectElement(items(),GetGadgetState(#liste))
  MessageRequester("Erreur","Sélectionner la ligne à effacer avant de cliquer"+Chr(10)+"                 sur supprimer", #MB_OK|#MB_ICONERROR)
   Else
  If GetGadgetState(#liste) > -1
      SelectElement(items(),GetGadgetState(#liste)) 
           DeleteElement(items()) 
             ;LastElement(items())
              ;Str(items()\Numero - Str(index))  
              ;ResetList(items())
              ;*ancienneliste=@items()
  
 ;a revoir
  If CreatePreferences("c:\Test.bib")
   n = 0  
    ForEach items() 
      n + 1 
      WritePreferenceString(Str(n) + "-Numero", items()\Numero) 
      WritePreferenceString(Str(n) + "-NomCD", items()\NomCD) 
      WritePreferenceString(Str(n) + "-CategorieCD", items()\CategorieCD) 
      WritePreferenceString(Str(n) + "-MarqueCD", items()\MarqueCD)
      ;WriteStringN("") puis utiliser cette commande ?
    Next 
    ClosePreferences() 
  EndIf 
 ClearGadgetItemList(#liste) 
    ForEach items() 
    AddGadgetItem(#liste,-1,items()\Numero+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD)    
    Next
  EndIf
  EndIf 
  EndProcedure 

;procedure pour la modification d'un element
Procedure modifier()
 If GetGadgetState(#liste) > -1
 SelectElement(items(),GetGadgetState(#liste))
   items()\Numero = InputRequester("Numero","Entrez le noveau nom: ",items()\Numero)
   items()\NomCD = InputRequester("NomCD","Entrez le noveau nom: ",items()\NomCD)
   items()\CategorieCD = InputRequester("CategorieCD","Entrez le noveau nom: ",items()\CategorieCD)
   items()\MarqueCD = InputRequester("MarqueCD","Entrez le noveau nom: ",items()\MarqueCD)
   
   SetGadgetItemText(#liste,GetGadgetState(#liste),items()\Numero,0)
   SetGadgetItemText(#liste,GetGadgetState(#liste),items()\NomCD,1) 
   SetGadgetItemText(#liste,GetGadgetState(#liste),items()\CategorieCD,2)
   SetGadgetItemText(#liste,GetGadgetState(#liste),items()\MarqueCD,3)
   ;modification directe dans le fichier "Test.bib"
   If CreatePreferences("c:\Test.bib");creation et ecriture dans le ficher "c:\Test.bib"
   n = 0  
    ForEach items() 
      n + 1 
      WritePreferenceString(Str(n) + "-Numero", items()\Numero) 
      WritePreferenceString(Str(n) + "-NomCD", items()\NomCD) 
      WritePreferenceString(Str(n) + "-CategorieCD", items()\CategorieCD) 
      WritePreferenceString(Str(n) + "-MarqueCD", items()\MarqueCD)
      ;WriteStringN("") puis utiliser cette commande ?
    Next 
    ClosePreferences() 
    EndIf

 EndIf 
EndProcedure
 
  
  If OpenWindow(1,0,0,820,500,#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_TitleBar,"CD/DVD-Theque")  
    CreateGadgetList(WindowID(1)) 
     ListIconGadget(#liste,250,30,565,410,"N°",40,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect) 
      AddGadgetColumn(#liste,1,"Nom CD",160) 
     AddGadgetColumn(#liste,2,"Categorie CD",180)
    AddGadgetColumn(#liste,3,"Marque CD",180)
  EndIf
 
        index = index + 1 
     
  CreateMenu(1,WindowID(1)) 
  MenuTitle("Menu") 
    MenuItem(#Enregistrer,"Enregistrer") 
    MenuItem(#Supprimer,"Supprimer") 
    MenuItem(#Modifier,"Modifier")
    MenuItem(#Enregistrement,"Enregistrement")
    MenuItem(#Apropos,"A propos")
    MenuBar() 
    MenuItem(#Quitter,"Quitter")
    
;creation des boutons      
    TextGadget(#text_NomCD, 10, 105,80,20,"Nom CD") 
    TextGadget(#text_Categorie, 10, 175,80,20,"Categorie") 
    TextGadget(#text_MarqueCD, 10, 245,80,20,"Marque CD")
    TextGadget(#frame, 20,30,200,35,"Bibliothèque de CDs",#PB_Text_Center|#PB_Text_Border) 
    ComboBoxGadget(#combo,90,170,150,100)
    StringGadget(#NomCD,90, 100,150,20,"Win XP")
    StringGadget(#MarqueCD,90, 240,150,20,"Sony")
     
    AddGadgetItem(#combo,00,"Musiques")
    AddGadgetItem(#combo,1,"Logiciels")
    AddGadgetItem(#combo,2,"Donnees")
    AddGadgetItem(#combo,3,"Jeux")
    AddGadgetItem(#combo,4,"Film")
    AddGadgetItem(#combo,5,"Divers")
    SetGadgetState(#combo, 1) 
     
    ButtonGadget(#Bouton_enregistrer,10,320,100,20,"Enregistrer")
    ButtonGadget(#Modifier,10,370,100,20,"Modifier")
    ButtonGadget(#quitter,140,420,100,20,"Quitter")
    ButtonGadget(#Supprimer,140,320,100,20,"Supprimer")
    ButtonGadget(#Apropos,10,420,100,20,"A propos")
    ButtonGadget(#Enregistrement,140,370,100,20,"S'Enregistrer")
    Charger()
     
  Repeat 
    Select WaitWindowEvent()
    Case #PB_EventCloseWindow
        Sortie = 1
        event = 20
;action concernant les menus      
     Case #PB_EventMenu 
        Select EventMenuID() 
          Case #quitter 
            Sortie = 1          
            Case#Modifier:modifier()
           Case#Enregistrer:Sauver()
          Case#Supprimer:supprimer()
          Case#Apropos:MessageRequester("A Propos","www.micko159@ifrance.com ", #MB_OK|#MB_ICONINFORMATION) 
     EndSelect  
;action concernant les boutons    
      Case #PB_Event_Gadget 
        Select EventGadgetID()
        Case#Bouton_enregistrer:Sauver()
        Case#Supprimer:supprimer()
        Case #quitter
        Sortie = 1
        Case#Modifier:modifier()
        Case#Apropos:MessageRequester("A Propos","www.micko159@ifrance.com ", #MB_OK|#MB_ICONINFORMATION)
        Case#PB_EventType_LeftClick
        If GetGadgetState(#liste) > -1
         SelectElement(items(),GetGadgetState(#liste))
           SetGadgetText(#NomCD, ""+items()\NomCD)
            SetGadgetText(#combo, ""+items()\CategorieCD)
           SetGadgetText(#MarqueCD, ""+items()\MarqueCD)
          EndIf     
        EndSelect
      
        Select EventType() 
       
        EndSelect         
        EndSelect  
             
     Until Sortie = 1 
  ActivateWindow() 
  CloseWindow(1)
  
;#######################
;problemes rencontrés ##
;#######################
;1. Mise à jour des numeros se fait avec une repetition avant de continuer normalement.
;2. Pour supprimer une seule ligne juste apres l'enrgistrement, toutes les autres lignes enregistrées
;3. Sont effacées.
;4. quand on efface une ligne du milieu les suivantes ne sont pas mises jour(les numeros)
; ExecutableFormat=Windows
; CursorPosition=94
; FirstLine=79
; EOF
merci à vous
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: probleme avec ce code(de l'aide s'il vous plait)

Message par Anonyme2 »

SpaceMan a écrit :salut a vous les problemes j'en ai pas mal les voici
1. Mise à jour des numeros se fait avec une repetition avant de continuer normalement.
Tu dois comprendre que la première ligne de la listicongadget a le numéro 0.
dans la procedure sauver(), après le next du foreach items(), j'ai ajouté ceci

Code : Tout sélectionner

Procedure Sauver()
If  AddElement(items())
    items()\Numero=GetGadgetText(#liste)
    items()\NomCD=GetGadgetText(#NomCD)
    items()\CategorieCD=GetGadgetText(#combo)
    items()\MarqueCD=GetGadgetText(#MarqueCD)
  AddGadgetItem(#liste,-1,Str(n)+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD)
EndIf 
 If CreatePreferences("c:\Test.bib");creation et ecriture dans le ficher "c:\Test.bib"
   n = 0
    ForEach items()
      n + 1
      PreferenceComment("enregistrement N°"+ Str(n)) ;puis utiliser cette commande ?
      PreferenceComment("                                       ")
      WritePreferenceString(Str(n) + "-Numero", Str(n))
      WritePreferenceString(Str(n) + "-NomCD", items()\NomCD)
      WritePreferenceString(Str(n) + "-CategorieCD", items()\CategorieCD)
      WritePreferenceString(Str(n) + "-MarqueCD", items()\MarqueCD)
      PreferenceComment("                                       ")      
    Next
    n + 1   ;   <---------------------------------c'est ici 
    ClosePreferences()
 EndIf
EndProcedure
SpaceMan a écrit :2. Pour supprimer une seule ligne juste apres l'enrgistrement, toutes les autres lignes enregistrées
3. Sont effacées.
Pas compris ce que tu veux dire, essayes de mieux t'expliquer :roll:
SpaceMan a écrit :4. quand on efface une ligne du milieu les suivantes ne sont pas mises jour(les numeros)
J'ai simplifié la procedure supprimer()
Le If GetGadgetState(#liste) < 1 du début doit être remplacé par If GetGadgetState(#liste) < 0 car on ne peut pas effacer la 1ere ligne car l'indice de la premiere ligne est 0, j'ai mis en commentaire la ligne suivante car si on a pas de ligne sélectionnée, ça plante car le selectelement ne peut pas avoir l'indice -1, supprime cette ligne

j'ai supprimé le test If GetGadgetState(#liste) > -1 car si dans le premier test on est inférieur à 0, c'est bien que dans le cas contraire on est sur une ligne valide, pas besoin de retester.

J'ai regroupé l'affichage des éléments de la listicon dans le foreach du CreatePreferences ce qui supprime quelques lignes de code.

voici la procedure corrigée.

Code : Tout sélectionner

Procedure supprimer()
;n=1
  If GetGadgetState(#liste) < 0
     ; SelectElement(items(),GetGadgetState(#liste))
      MessageRequester("Erreur","Sélectionner la ligne à effacer avant de cliquer"+Chr(10)+"                 sur supprimer", #MB_OK|#MB_ICONERROR)
  Else
  ;  If GetGadgetState(#liste) > -1
        SelectElement(items(),GetGadgetState(#liste))
             DeleteElement(items())
             ;LastElement(items())
              ;Str(items()\Numero - Str(index)) 
              ;ResetList(items())
              ;*ancienneliste=@items()
 
 ;a revoir
         If CreatePreferences("c:\Test.bib")
              n = 0 
              ClearGadgetItemList(#liste)
            ForEach items()
              
               n + 1
               WritePreferenceString(Str(n) + "-Numero", Str(n))
               WritePreferenceString(Str(n) + "-NomCD", items()\NomCD)
               WritePreferenceString(Str(n) + "-CategorieCD", items()\CategorieCD)
                WritePreferenceString(Str(n) + "-MarqueCD", items()\MarqueCD)
                ;WriteStringN("") puis utiliser cette commande ?
               AddGadgetItem(#liste,-1,Str(n)+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD)   
             Next
             ClosePreferences()
               n + 1
         EndIf
 ;   ForEach items()
;     AddGadgetItem(#liste,-1,items()\Numero+Chr(10)+items()\NomCD+Chr(10)+items()\CategorieCD+Chr(10)+items()\MarqueCD)   
;  ;   Next
 ; EndIf
  EndIf
  EndProcedure
je pense qu'il faut modifier la procedure modifier() mais je te laisse faire.
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

salt Denis
2. Pour supprimer une seule ligne juste apres l'enrgistrement, toutes les autres lignes enregistrées
3. Sont effacées.
au fait c'est pour dire que lorsque j'enregistre 3 cds par exemple
et que je decide d'effacer le 2ème, tous les 3 enregistrements sont effacés ok je vais revoir tes corrections
et encore merci
:)
[/code]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Ca ne doit plus arriver avec les modifs de la procedure supprimer()
Répondre