probleme fonction preference

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
yumeria
Messages : 18
Inscription : ven. 11/janv./2013 6:59

probleme fonction preference

Message 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
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: probleme fonction preference

Message 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')
yumeria
Messages : 18
Inscription : ven. 11/janv./2013 6:59

Re: probleme fonction preference

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: probleme fonction preference

Message 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.
Dernière modification par Ar-S le mar. 22/janv./2013 16:00, modifié 5 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: probleme fonction preference

Message 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...
yumeria
Messages : 18
Inscription : ven. 11/janv./2013 6:59

Re: probleme fonction preference

Message 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)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: probleme fonction preference

Message par djes »

:)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: probleme fonction preference

Message par Ar-S »

Ah bien :) , ce que j'ai noté est à prendre en compte.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
yumeria
Messages : 18
Inscription : ven. 11/janv./2013 6:59

Re: probleme fonction preference

Message par yumeria »

ok.
je prends tout en compte :wink:
Répondre