Page 1 sur 1

ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 11:06
par Shinao
Bonjour,
Je me suis enfin décidé à vous demander de l'aide, voici mon problème :

J'ai un ComboBoxGadget() (oui, très puissant et avancé mon code), dont on ajoute des Items (je sais je sais ça va loin).
Après j'ai un SetGadgetState(#ComboLangue, 0) donc il choisit la première langue qui est disponible...

Or, il ne met que le state que lorsque je passe le curseur sur mon ComboBox, quand il y a un évènement dessus en faite... sauf que je ne rentre pas dans la boucle évènementielle, pas de case ni rien sur lui pour l'instant, je l'ai mis là ou il y a tout mes gadgets...

J'ai testé un : While WindowEvent() : Wend qui à marché pour certaines choses mais ça ne refresh pas ma fenêtre cette fois-ci.

Le problème vient de moi ou c'est PB qui ne gère pas ça ?

Thanks

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 11:29
par falsam
N'ayant pas tout à fait compris. Je poste un début de code que tu pourrais compléter pour essayer de comprendre ton souci :)

Code : Tout sélectionner

Enumeration
  #Window
  #HoMonCombooooo
EndEnumeration

OpenWindow(#Window,0,0,500,400,"Test combo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ComboBoxGadget(#HoMonCombooooo, 20, 20, 200, 22)
AddGadgetItem(#HoMonCombooooo, -1, "Allemand")
AddGadgetItem(#HoMonCombooooo, -1, "Anglais")
AddGadgetItem(#HoMonCombooooo, -1, "Espagnol")
AddGadgetItem(#HoMonCombooooo, -1, "Français")

SetGadgetState(#HoMonCombooooo, 0)

Repeat
  
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End                
      
  EndSelect
ForEver

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 13:12
par Ar-S
ça vient pas de PB ... allons...

L'explication de ton soucis étant incompréhensible pour ma part, voilà un exemple ou tu peux ajouter une langue tout et afficher dans un string l'élément sélectionné:
si ton explication est aussi vaseuse et si tu ne mets pas de code la prochaine fois, tu vas te sentir seul !

Code : Tout sélectionner

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #ComboLangue
  #Button
  #INFO
EndEnumeration

If OpenWindow(#Window_0, 512, 174, 400, 120, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  
  ComboBoxGadget(#ComboLangue, 10, 80, 380, 25)
  AddGadgetItem(#ComboLangue, -1, "FR") 
  AddGadgetItem(#ComboLangue, -1, "UK")
  AddGadgetItem(#ComboLangue, -1, "DE")
  AddGadgetItem(#ComboLangue, -1, "ES")
  numList = GetGadgetState(#ComboLangue) ; trouve la position
  SetGadgetState(#ComboLangue,0);  on se place sur l'élément en position 0 donc : FR
  
  ButtonGadget(#Button, 5, 5, 390, 25, "Ajouter Italie")
  StringGadget(#INFO, 6, 40, 385, 25, "Infos")
  
   
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #ComboLangue
            SetGadgetText(#INFO,GetGadgetItemText(#ComboLangue,GetGadgetState(#ComboLangue)))
            
            
          Case #Button
            Nbr = CountGadgetItems(#ComboLangue) ; Compte le nbr de langue
            numList = GetGadgetState(#ComboLangue) ; trouve la position
            Name$ = GetGadgetItemText(#ComboLangue,numList) ; Nom de la langue en cours
            
            numList+1 ; on se positionne apres l'élément selectionné
            AddGadgetItem(#ComboLangue, numList, "IT")
            SetGadgetState(#ComboLangue,numList)
            SetGadgetText(#INFO,GetGadgetItemText(#ComboLangue,GetGadgetState(#ComboLangue)))

        EndSelect
        
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Window_0
            CloseWindow(#Window_0)
            Break
        EndSelect
    EndSelect
  ForEver
  
EndIf

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 13:24
par Shinao
J'ai compris d'ou vient mon erreur, elle se situe au niveau de la fonction AnimateWindow_ (api) :

Mon erreur produisait ça (en utilisant le code de falsam) :

Code : Tout sélectionner

Enumeration
  #Window
  #HoMonCombooooo
EndEnumeration

OpenWindow(#Window,0,0,500,400,"Test combo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_Invisible)
ComboBoxGadget(#HoMonCombooooo, 20, 20, 200, 22)
AddGadgetItem(#HoMonCombooooo, -1, "Allemand")
AddGadgetItem(#HoMonCombooooo, -1, "Anglais")
AddGadgetItem(#HoMonCombooooo, -1, "Espagnol")
AddGadgetItem(#HoMonCombooooo, -1, "Français")

SetGadgetState(#HoMonCombooooo, 0)
AnimateWindow_(WindowID(#Window), 1000, #AW_BLEND | #AW_ACTIVATE)


Repeat
 
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End               
     
  EndSelect
ForEver
Or si on met le SetGadgetState() après le AnimateWindow_(), aucun problème...
Comment puis-je garder mon AnimateWindow tout en ayant mon state directement ?

Sans modifier le delay de la fonction, ça enlève tout son charme...

merci pour vos réponses

Edit : j'ai même juste à réduire puis agrandir la fenêtre pour que mon State(0) s'active...

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 15:30
par graph100
Regarde du coté de sendmessage_() et windowrefresh, ou repaint, (c'est des constantes dans les API)

fait carrement une recherche sur le raffraichissement des fenetres sur le MSDN de grosoft

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 15:46
par falsam
Shinao a écrit :Or si on met le SetGadgetState() après le AnimateWindow_(), aucun problème...
Comment puis-je garder mon AnimateWindow tout en ayant mon state directement ?
Dans ce cas, le ComboBox est initialisé avec la valeur voulu une fois la séquence d'animation de la fenêtre terminée.

Toi ce que tu souhaites c'est que durant la séquence d'animation de la fenêtre, le combo soit au préalable initialisé avec la valeur souhaité comme le montre l'exemple avec une autre valeur d'animation.

Code : Tout sélectionner

Enumeration
  #Window
  #HoMonCombooooo
EndEnumeration


OpenWindow(#Window,0,0,500,400,"Test combo", #PB_Window_ScreenCentered| #PB_Window_Invisible|#PB_Window_SystemMenu )
ComboBoxGadget(#HoMonCombooooo, 20, 20, 200, 22)
AddGadgetItem(#HoMonCombooooo, -1, "Allemand")
AddGadgetItem(#HoMonCombooooo, -1, "Anglais")
AddGadgetItem(#HoMonCombooooo, -1, "Espagnol")
AddGadgetItem(#HoMonCombooooo, -1, "Français")

SetGadgetState(#HoMonCombooooo, 0)
AnimateWindow_(WindowID(#Window), 1000, #AW_CENTER)

Repeat

  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      End               
     
  EndSelect
ForEver

Re: ComboBoxGadget() ne se raffraichie pas

Publié : mar. 21/juin/2011 16:02
par Shinao
Toi ce que tu souhaites c'est que durant la séquence d'animation de la fenêtre, le combo soit au préalable initialisé avec la valeur souhaité comme le montre l'exemple avec une autre valeur d'animation.
Je voudrais qu'il soit au préalable initialisée mais avec le même rendu au niveau de l'animation... d'ailleurs d'après ton code seul cette animation fais "bugger" mon ComboBox...
Regarde du coté de sendmessage_() et windowrefresh, ou repaint, (c'est des constantes dans les API)

fait carrement une recherche sur le raffraichissement des fenetres sur le MSDN de grosoft
Je regarderais ça demain, API aille, du mal à comprendre.


Si il y a d'autre intervenants, j'suis preneur !

Thanks