Problème avec le Min et le Max du SpinGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Problème avec le Min et le Max du SpinGadget

Message par Octavius »

Les valeurs minimum et maximum du SpinGadget doivent être un word, càd comprises entre -32768 et +32767, mais j'ai besoin d'un SpinGadget qui puisse dépasser les 100 000, comment changer les minimum et maximum en variables de type long ?
Anonyme

Message par Anonyme »

Non , mis à part refaire un gadget , je vois pas :?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il faut passer par des SendMessage_() (Ce qui limite l'utilisation à Windows)

Pour toutes les utilisations du gadget, les commandes de Pure ne seront plus valables. Il faudra tout faire avec les "SendMessage" à Billou.
(Tout au moins en ce qui concerne les commandes qui modifient la valeur interne du gadget)

Code : Tout sélectionner

#Win  = 0 : #Spin = 0

#UDM_SETPOS32 = #WM_USER + 113
#UDM_GETPOS32 = #WM_USER + 114

If OpenWindow(#Win, 0, 0, 200, 100, "Spin", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Win))
    
    SpinGadget(#Spin, 20, 20, 100, 25, 0, 0, #PB_Spin_Numeric)
    
    hSpin = FindWindowEx_(WindowID(#Win), GadgetID(#Spin), #Null, #Null)
    
    SendMessage_(hSpin, #UDM_SETRANGE32, -200000, 200000) ; Règle la portée du gadget
    SendMessage_(hSpin, #UDM_SETPOS32, 0, -158963)        ; Règle la valeur
    
    SetGadgetText(#Spin, Str(SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)))
    
  EndIf
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = #True
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Spin
            Pos = SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)
            SendMessage_(hSpin, #UDM_SETPOS32, 0, Pos)
            SetGadgetText(#Spin, Str(Pos))

        EndSelect
    EndSelect
  Until Quit
EndIf

End
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

J'ai essayé d'adapter ton code à mon programme, mais ça ne convient pas parce le SpinGadget est dans un panneau. Du coup le hSpin est 0 et le SpinGadget est inutilisable ! Comment corriger ça ?

Code : Tout sélectionner

#Win  = 0 : #Spin = 0 : #Panel = 1

#UDM_SETPOS32 = #WM_USER + 113
#UDM_GETPOS32 = #WM_USER + 114

If OpenWindow(#Win, 0, 0, 200, 100, "Spin", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Win))
    
    PanelGadget(#Panel,10,10,180,80)
    AddGadgetItem(#Panel,-1,"Onglet")
      
      SpinGadget(#Spin, 20, 20, 100, 25, 0, 0, #PB_Spin_Numeric)
     
      hSpin = FindWindowEx_(WindowID(#Win), GadgetID(#Spin), #Null, #Null)
     
      SendMessage_(hSpin, #UDM_SETRANGE32, -200000, 200000) ; Règle la portée du gadget
      SendMessage_(hSpin, #UDM_SETPOS32, 0, -158963)        ; Règle la valeur
     
      SetGadgetText(#Spin, Str(SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)))
      
      Debug hSpin
      
    CloseGadgetList()
   
  EndIf
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = #True
       
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Spin
            Pos = SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)
            SendMessage_(hSpin, #UDM_SETPOS32, 0, Pos)
            SetGadgetText(#Spin, Str(Pos))

        EndSelect
    EndSelect
  Until Quit
EndIf

End
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ben à mon avis, à la place du WIndowId(), tu mets le GadgetId() de ton panneau, tout simplement

Code : Tout sélectionner

hSpin = FindWindowEx_(GadgetID(#TonPanneau), GadgetID(#Spin), #Null, #Null) 
J'ai pas testé, (vu que je sais pas ce que tu appelles "un panneau"), mais essaye et tu verras si ça fonctionne
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Ben un panneau, un PanelGadget quoi ! :)

Le code que je t'ai posté contient mon fameux PanelGadget.

Remplacer WindowID() par GadgetID() ne fonctionne pas, tu peux tester avec le code que j'ai posté ci-dessus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Octavius a écrit :Ben un panneau, un PanelGadget quoi ! :)

Le code que je t'ai posté contient mon fameux PanelGadget.

Remplacer WindowID() par GadgetID() ne fonctionne pas, tu peux tester avec le code que j'ai posté ci-dessus.
Euh!... J'avais même pas vu que t'avais mis un code! :oops:


Essaye ça.

Code : Tout sélectionner

#Win  = 0 

Enumeration
  #Spin = 0
  #Panneau
EndEnumeration

#UDM_SETPOS32 = #WM_USER + 113
#UDM_GETPOS32 = #WM_USER + 114

If OpenWindow(#Win, 0, 0, 200, 200, "Spin", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(#Win))
    
    PanelGadget(#Panneau, 5, 5, 190, 190)
      AddGadgetItem(#Panneau, -1, "Onglet 1")
      
      SpinGadget(#Spin, 10, 20, 170, 20, 0, 0, #PB_Spin_Numeric)
      
      hSpin = FindWindowEx_(GetWindowLong_(GadgetID(#Spin), #GWL_HWNDPARENT), GadgetID(#Spin), #Null, #Null)
      
    CloseGadgetList()
    
    
    SendMessage_(hSpin, #UDM_SETRANGE32, -200000, 200000) ; Règle la portée du gadget
    SendMessage_(hSpin, #UDM_SETPOS32, 0, -199963)        ; Règle la valeur
    
    SetGadgetText(#Spin, Str(SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)))
    
  EndIf
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = #True
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Spin
            Pos = SendMessage_(hSpin, #UDM_GETPOS32, 0, 0)
            SendMessage_(hSpin, #UDM_SETPOS32, 0, Pos)
            SetGadgetText(#Spin, Str(Pos))
            
        EndSelect
    EndSelect
  Until Quit
EndIf

End
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Merci ça marche maintenant! :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Octavius a écrit :Merci ça marche maintenant! :D
Nickel!


Pas si largué que ça, le vioque, finalement! :mrgreen:
Répondre