Problème avec le Min et le Max du SpinGadget
Problème avec le Min et le Max du SpinGadget
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 ?
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)
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
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
Ben à mon avis, à la place du WIndowId(), tu mets le GadgetId() de ton panneau, tout simplement
J'ai pas testé, (vu que je sais pas ce que tu appelles "un panneau"), mais essaye et tu verras si ça fonctionne
Code : Tout sélectionner
hSpin = FindWindowEx_(GadgetID(#TonPanneau), GadgetID(#Spin), #Null, #Null)
Euh!... J'avais même pas vu que t'avais mis un code!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.

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