[v4 beta1] OptionGadget() et SetGadgetState() [Corrigé]

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

[v4 beta1] OptionGadget() et SetGadgetState() [Corrigé]

Message par Guimauve »

Il y a un bogue entre les OptionGadget() et la commande SetGadgetState()

Code : Tout sélectionner

If OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"OptionGadget") 
   
   If CreateGadgetList(WindowID(0))
      
      PanelGadget(15,5,5,350,200);>
         
         AddGadgetItem(15,0,"Onglet 01")
         OptionGadget(0, 30, 20, 60, 20, "Option 1")
         OptionGadget(1, 30, 45, 60, 20, "Option 2")
         OptionGadget(2, 30, 70, 60, 20, "Option 3")
         
         AddGadgetItem(15,1,"Onglet 02")
         OptionGadget(3, 30, 20, 60, 20, "Option 3")
         OptionGadget(4, 30, 45, 60, 20, "Option 4")
         OptionGadget(5, 30, 70, 60, 20, "Option 5")  
         
         AddGadgetItem(15,2,"Onglet 03")
         CheckBoxGadget(6, 30, 20, 60, 20, "Check 1")
         CheckBoxGadget(7, 30, 45, 60, 20, "Check 2")
         CheckBoxGadget(8, 30, 70, 60, 20, "Check 3")         
         
      CloseGadgetList();<
   EndIf
   
   ; Faire un SetGadgetState() sur CheckBoxGadget() marche très bien
   SetGadgetState(7,1)
   
   ; mais faire un SetGadgetState() sur OptionGadget() marche très mal
   ; le programme se bloque. Décommenter la ligne suivante pour faire le test
   ; SetGadgetState(0,1)
   
   Repeat 
      
   Until WindowEvent()=#PB_Event_CloseWindow
EndIf
A+
Guimauve
Dernière modification par Guimauve le dim. 05/févr./2006 21:02, modifié 1 fois.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Quelques tests supplémentaires ...

Un code qui fonctionne :

Code : Tout sélectionner

If OpenWindow(0,0,0,400,300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered,"OptionGadget")
   
   If CreateGadgetList(WindowID(0))
      
      ; PanelGadget(100,5,5,390,250);>
      ; AddGadgetItem(100,0,"Onglet 1")
      Frame3DGadget(10,5,5,150,100,"1ère série d'option")
      OptionGadget(0, 30, 20, 60, 20, "Option 1")
      OptionGadget(1, 30, 45, 60, 20, "Option 2")
      OptionGadget(2, 30, 70, 60, 20, "Option 3")
      
      ; AddGadgetItem(100,1,"Onglet 2")
      ; Frame3DGadget(3,5,5,150,100,"2e série d'option")
      ; OptionGadget(4, 30, 20, 60, 20, "Option 3")
      ; OptionGadget(5, 30, 45, 60, 20, "Option 4")
      ; OptionGadget(6, 30, 70, 60, 20, "Option 5")
      ; 
      ;  CloseGadgetList();<
      
      ;  SetGadgetState(100,1)   ; set second option as active one
      SetGadgetState(1,1) 
   EndIf 
   
   
   Repeat : Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Un code qui ne fonctionne pas :

Code : Tout sélectionner

If OpenWindow(0,0,0,400,300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered,"OptionGadget")
   
   If CreateGadgetList(WindowID(0))
      
      ; PanelGadget(100,5,5,390,250);>
      ; AddGadgetItem(100,0,"Onglet 1")
      ; Frame3DGadget(10,5,5,150,100,"1ère série d'option")
      OptionGadget(0, 30, 20, 60, 20, "Option 1")
      OptionGadget(1, 30, 45, 60, 20, "Option 2")
      OptionGadget(2, 30, 70, 60, 20, "Option 3")
      
      ; AddGadgetItem(100,1,"Onglet 2")
      ; Frame3DGadget(3,5,5,150,100,"2e série d'option")
      ; OptionGadget(4, 30, 20, 60, 20, "Option 3")
      ; OptionGadget(5, 30, 45, 60, 20, "Option 4")
      ; OptionGadget(6, 30, 70, 60, 20, "Option 5")
      ; 
      ;  CloseGadgetList();<
      
      ;  SetGadgetState(100,1)   ; set second option as active one
      SetGadgetState(1,1) 
   EndIf 
   
   
   Repeat : Until WindowEvent()=#PB_Event_CloseWindow
EndIf
Selon mes observations si l'option gadget s'il est le premier dans la liste de gadget courante le programme se bloque lorsqu'il s'exécute. S'il n'est pas le premier gadget tout fonctionne bien lorsque l'on fait un SetGadgetState().

De plus, j'ai un problème de rafraichissement de l'affichage des gadgets d'un programme relativement complexe (60 à 80 gadgets). Malheureusement je n'ai pas réussi à reproduire le problème dans un exemple simple.

Quoiqu'il en soit, le problème est que le rafraichissement de certain gadget de type Option ou CheckBox se fait seulement lorsque le curseur les survole. Je continue de chercher.

En espérant que ça va aider un peu !

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

Message par Guimauve »

Bogue corrigé par Freak le "05-02-2006"

A+
Guimauve
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Tu peux p-ê corriger le sujet en [Corrigé] pour clôturer le truc ?
Vive le thread-safe !
Répondre