Page 1 sur 1

probleme fonction preference

Publié : mar. 22/janv./2013 12:47
par yumeria
je continue mon petit programme de gestion des course
afin d'apprendre le langage purebasic.
mais j'ai un problème avec l'utilisation de la fonction préférence
qui permet d'enregistrer les préférences de l'utilisateur.
mon but est d'enregistrer les couleurs d'un ColorRequester()
dans un fichier "couleursfenetre.prefs" mais lorsque j'ouvre mon
programme une 2eme fois la couleur ne s'affiche pas.
a la place j'ai du noir.et quand je ferme et relance mon programme
il y a d'autres couleurs aléatoires qui ne sont pas celles que j'ai choisis.

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;constantes
#chemin_BDD="c:\listecourse.db3"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;gadget


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;variables
ouvpref.l=0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;procedures
Procedure xcm(x.f)
  x = x * (PrinterPageWidth()/21) ; 21cm A4
  ProcedureReturn x
EndProcedure
Procedure ycm(x.f)
  x = x * (PrinterPageHeight()/29.7) ; 29,7cm A4
  ProcedureReturn x
EndProcedure 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;debut du programme
IncludePath "C:\Users\yumeria\Documents"
IncludeFile "test.pbf"

initouvre_fenetreprincipal()
ouvpref.l=OpenPreferences("couleursfenetre.prefs")
If ouvpref.l=0
  CreatePreferences("couleursfenetre.prefs")
  WritePreferenceLong("coulchoixrouge",255)
  WritePreferenceLong("coulchoixvert",255)
  WritePreferenceLong("coulchoixbleu",255)
  ClosePreferences()
  
  
ElseIf ouvpref.l>0
  
  coul1.l=ReadPreferenceLong("coulchoixrouge",0)
  coul2.l=ReadPreferenceLong("coulchoixvert",0)
  coul3.l=ReadPreferenceLong("coulchoixbleu",0)
  SetWindowColor(#ouvre_fenetreprincipal,RGB(coul1.l,coul2.l,coul3.l))
  
  ClosePreferences()
  EndIf
UseSQLiteDatabase()
OpenDatabase(0,#chemin_BDD,"","")
If DatabaseQuery(0, "SELECT * FROM lcourse")
  While NextDatabaseRow(0)
           AddGadgetItem(#ListIcon_0,-1,GetDatabaseString(0, 1))
         Wend
    FinishDatabaseQuery(0)     
       EndIf
 

      
         



Repeat
  event=WaitWindowEvent()
  
  
  
  If event=#PB_Event_Gadget
    Select EventGadget ()
      Case #Button_0
        
      texteitem$=GetGadgetText(#String_0)
      DatabaseUpdate(0,"INSERT INTO lcourse(produit) VALUES('"+texteitem$+"')")
      AddGadgetItem(#ListIcon_0,-1,GetGadgetText(#String_0))
        
      Case #Button_1

        For a=CountGadgetItems(#ListIcon_0) - 1 To 0 Step -1
                  
     If GetGadgetItemState(#ListIcon_0, a) = #PB_ListIcon_Checked   
          RemoveGadgetItem(#ListIcon_0,a)
     EndIf
       
   Next 
   
   
    EndSelect
  EndIf
  
  If event=#PB_Event_Menu
    Select EventMenu()
      Case #MenuItem_imprimer
        
yhaut = 300
xleft = 300
p=0
If PrintRequester()
  If StartPrinting("Multipages av n°")
    Font=ycm(((8*0.090)/2.5))
    LoadFont(1,"Arial",Font)
    If StartDrawing(PrinterOutput())
        DrawingFont(FontID(1))
        For n=0 To CountGadgetItems(#ListIcon_0)  ; le nombre de ligne ici
          yhaut=yhaut+(Font*1.5)
          DrawText(xleft,yhaut,GetGadgetItemText(#ListIcon_0,n-1,0)) ; et ton texte gadget ici !
          If yhaut>ycm(780*0.035)   
            p=p+1                 ; 29.7cm/848pixels=0.035 - 21.0cm/600pixels=0.035             
            DrawText(xcm(500*0.035),ycm(800*0.035),Str(p))  ;numero de bas page droite
            NewPrinterPage()
            yhaut=300
          EndIf 
        Next n
        p=p+1
        DrawText(xcm(500*0.035),ycm(800*0.035),Str(p))  ;numero de derniere page
      StopDrawing()
    EndIf
    StopPrinting()
  EndIf
EndIf
      Case 1
        
        
      Case 2
        For y=0 To CountGadgetItems(#ListIcon_0)
          texteitem$=GetGadgetItemText(#ListIcon_0,y)
          DatabaseUpdate(0,"INSERT INTO lcourse(produit) VALUES('"+texteitem$+"')")
          Debug texteitem$
        Next
        
      Case #MenuItem_2
        couleurschoix=ColorRequester()
        ;SetWindowColor(#ouvre_fenetreprincipal,ColorRequester())
        couleurschoix1.l=Red(couleurschoix)
        couleurschoix2.l=Green(couleurschoix)
        couleurschoix3.l=Blue(couleurschoix)
        
        
        OpenPreferences("couleursfenetre.prefs")
        WritePreferenceLong("coulchoixrouge",Red(couleurschoix1.l))
        WritePreferenceLong("coulchoixvert",Green(couleurschoix2.l))
        WritePreferenceLong("coulchoixbleu",Blue(couleurschoix3.l))
        ClosePreferences()
        
        
        
      
    EndSelect
   EndIf
   
Until event=#PB_Event_CloseWindow

fichier include

Code : Tout sélectionner

; Form Designer for Purebasic - 5.0
; Warning: this file uses a strict syntax, if you edit it, make sure to respect the Form Designer limitation or it won't be opened again.

Enumeration #PB_Compiler_EnumerationValue
  #ouvre_fenetreprincipal
EndEnumeration

Enumeration #PB_Compiler_EnumerationValue
  #Button_0
  #Button_1
  #ListIcon_0
  #String_0
  #String_1
EndEnumeration

Enumeration #PB_Compiler_EnumerationValue
  #menu_couleurs
  #MenuItem_2
  #MenuItem_imprimer
EndEnumeration

Procedure Initouvre_fenetreprincipal()
  OpenWindow(#ouvre_fenetreprincipal, 0, 0, 670, 470, "cours", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  CreateMenu(0, WindowID(#ouvre_fenetreprincipal))
  MenuTitle("couleur")
  MenuItem(#MenuItem_2,"definir une couleur")
  MenuTitle("imprimer")
  MenuItem(#MenuItem_imprimer,"imprimer")
  ButtonGadget(#Button_0, 30, 100, 120, 50, "ajouter")
  ButtonGadget(#Button_1, 330, 100, 120, 50, "retirer")
  ListIconGadget(#ListIcon_0, 30, 170, 420, 270, "mes courses", 100, #PB_ListIcon_CheckBoxes)
  StringGadget(#String_0, 30, 60, 120, 30, "tapez votre texte")
  StringGadget(#String_1, 330, 60, 120, 30, "tapez votre texte")
EndProcedure

Re: probleme fonction preference

Publié : mar. 22/janv./2013 12:56
par Fred
Vu que tu commences, ne type pas les variables qui n'en ont pas besoin, ou alors utilise le type '.i', car tu vas avoir de mauvaises surprise avec les '.l' si tu passes en 64-bit. En PureBasic il faut eviter de typer si ce n'est pas necessaire (le type par defaut est '.i')

Re: probleme fonction preference

Publié : mar. 22/janv./2013 13:08
par yumeria
j'ai supprimer pour les variables dont je pense que je n'ai ai pas besoin.
mais malheureusement j'ai toujours le même problème.
:x
merci pour l'astuce pour les variables.

Re: probleme fonction preference

Publié : mar. 22/janv./2013 14:48
par Ar-S
Tu as déjà zappé le preferencegroup(Nom$)

Chose importante :
Ou se trouve ton couleursfenetre.prefs ?
C'est bien beau OpenPreferences("couleursfenetre.prefs") mais a aucun moment tu n'indiques ou le fichier se trouve.
Du coup peut-être que PB se perd entre répertoire temp et repertoire ou se trouve ton code.
je t'invite à faire un

Code : Tout sélectionner

Pref$ = GetCurrentDirectory()+"couleursfenetre.prefs"
; voir même un 
Global Pref$ = GetCurrentDirectory()+"couleursfenetre.prefs"
Tu peux aussi à l'ouverture de ta fênetre ajouter des
debug coul1
debug coul2
debug coul3

tu seras fixé si ces variables sont lues correctement ou pas.

Re: probleme fonction preference

Publié : mar. 22/janv./2013 14:52
par djes
Suis pas à pas le déroulement de ton programme avec le débogueur activé. Mets un point d'arrêt à certaines parties de ton code pour voir ce qui se passe.

Ici par exemple, insère un "CallDebugger" juste après le Case #MenuItem_2, puis appuies plusieurs fois sur la touche F8 en analysant bien ce que ton programme fait...

Re: probleme fonction preference

Publié : mar. 22/janv./2013 15:13
par yumeria
j'ai trouver la solution.
c'était une erreur toute bête.
dans case #MenuItem_2

il fallait juste remplacer

Code : Tout sélectionner

WritePreferenceLong("coulchoixrouge",Red(couleurschoix1.l))
WritePreferenceLong("coulchoixvert",Green(couleurschoix2.l))
WritePreferenceLong("coulchoixbleu",Blue(couleurschoix3.l))
par

Code : Tout sélectionner

 WritePreferenceLong("coulchoixrouge",couleurschoix1.l)
        WritePreferenceLong("coulchoixvert",couleurschoix2.l)
        WritePreferenceLong("coulchoixbleu",couleurschoix3.l)

Re: probleme fonction preference

Publié : mar. 22/janv./2013 15:36
par djes
:)

Re: probleme fonction preference

Publié : mar. 22/janv./2013 15:42
par Ar-S
Ah bien :) , ce que j'ai noté est à prendre en compte.

Re: probleme fonction preference

Publié : mar. 22/janv./2013 15:47
par yumeria
ok.
je prends tout en compte :wink: