Page 1 sur 1
Progression SpinGadget
Publié : mar. 21/mars/2017 22:16
par ChrisR
Y a t-il un moyen, a partir d'un SpinGadget de changer le pas de progression des boutons haut, bas ?
J'ai essayé, voir le code exemple ci-dessous. Il fonctionne si on va doucement.
Mais en restant appuyé sur haut ou bas, la progression de 1 par défaut va plus vite que la gestion des events.
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinGadget
EndEnumeration
Define Progression = 10
OpenWindow(#WinMain, x, y, 140, 50, "Spin Progress", #PB_Window_SystemMenu)
SpinGadget(#SpinGadget, 20, 10, 100, 25, 140, 1920, #PB_Spin_Numeric)
SetGadgetState(#SpinGadget, WindowWidth(#WinMain))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
If EventType() = #PB_EventType_Up : SetGadgetState(#SpinGadget, GetGadgetState(#SpinGadget)+Progression-1) : EndIf
If EventType() = #PB_EventType_Down : SetGadgetState(#SpinGadget, GetGadgetState(#SpinGadget)-Progression+1) : EndIf
If EventType() = #PB_EventType_Change
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
EndIf
EndSelect
EndSelect
ForEver
Re: Progression SpinGadget
Publié : mar. 21/mars/2017 22:30
par Shadow
Je ne sais pas si ont peut changer le pas, c'est vraie qu'il n'y à pas de paramètre pour ça.
Voici ton code avec des correction, ça fonctionne mieux:
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinGadget
EndEnumeration
Define Progression = 10
OpenWindow(#WinMain, x, y, 140, 50, "Spin Progress", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SpinGadget(#SpinGadget, 20, 10, 100, 25, 140, 1920, #PB_Spin_Numeric)
SetGadgetState(#SpinGadget, WindowWidth(#WinMain))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up
SetGadgetState(#SpinGadget, GetGadgetState(#SpinGadget) + Progression - 1)
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
Case #PB_EventType_Down
SetGadgetState(#SpinGadget, GetGadgetState(#SpinGadget) - Progression + 1)
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
EndSelect
EndSelect
EndSelect
ForEver
Re: Progression SpinGadget
Publié : mar. 21/mars/2017 23:07
par Ollivier
Ça:
-> c'est de trop
Pourquoi? Parce que tu prends "déjà" (dans la boucle d'événements) en charge les événements. Il me semble que cette option convient bien pour une progression automatique "un par un", qui ne nécessite aucune gestion d'événement.
Ensuite, ça
ça se traduit par:
0, 11, 22, 33, etc...
Intuitivement, j'ai l'impression que tu cherches un simple :
0, 10, 20, 30, etc...
Donc le +1 me semble de trop.
En enlevant les +1 et les -1, et l'option #PB_Spin_Numeric, tu devrais retomber sur tes pattes.
Re: Progression SpinGadget
Publié : mar. 21/mars/2017 23:22
par falsam
@Shadow : Ton code ne change rien au comportement du spin. Presse le bouton Up suffisamment longtemps. La progression n'est plus de 10 en 10.
@Ollivier : Hummm sans #PB_Spin_Numeric pas de calcul
Re: Progression SpinGadget
Publié : mar. 21/mars/2017 23:28
par falsam
De cette manière il n'y a plus de souci de décalage d'incrémentation/décrémentation.
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinGadget
EndEnumeration
Define Count = 140, Progression = 10
OpenWindow(#WinMain, x, y, 140, 50, "Spin Progress", #PB_Window_SystemMenu)
SpinGadget(#SpinGadget, 20, 10, 100, 25, 140, 1920, #PB_Spin_Numeric)
SetGadgetText(#SpinGadget, "140")
SetGadgetState(#SpinGadget, WindowWidth(#WinMain))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up : Count + 10
Case #PB_EventType_Down : Count - 10
EndSelect
SetGadgetText(#SpinGadget, Str(Count))
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
EndSelect
EndSelect
ForEver
Re: Progression SpinGadget
Publié : mar. 21/mars/2017 23:54
par ChrisR
En effet Olivier, je veux 0, 10, 20, 30... j'avais ajouté pour cela le +1 ou -1 dans GetGadgetState(#SpinGadget)+Progression-1)
C'est résolu avec le code de Falsam, en gérant avec son propre compteur. Parfait, merci

Re: Progression SpinGadget
Publié : mer. 22/mars/2017 10:55
par PAPIPP
Bonjour à tous
Et pour éviter d’avoir un texte du spingadget qui diminue en dessous de la valeur originale.
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinGadget
EndEnumeration
Define Count = 140, Progression = 10
OpenWindow(#WinMain, x, y, 140, 50, "Spin Progress", #PB_Window_SystemMenu)
SpinGadget(#SpinGadget, 20, 10, 100, 25, 140, 1920, #PB_Spin_Numeric)
SetGadgetText(#SpinGadget, "140")
SetGadgetState(#SpinGadget, WindowWidth(#WinMain))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up : Count + 1
Case #PB_EventType_Down : Count - 1
EndSelect
; SetGadgetText(#SpinGadget, Str(Count))
SetGadgetText(#SpinGadget,str(GetGadgetState(#SpinGadget)) )
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
EndSelect
EndSelect
ForEver
A+
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 12:22
par ChrisR
Bonjour PAPIPP
Avec un pas de progression de 1 (Count+1(-1)), il n'y a pas besoin de passer par le compteur count.
Il est fait automatiquement par PB et ceci suffit:
Code : Tout sélectionner
Case #SpinGadget
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
Pour un pas de progression <> 1, il faut en effet passer par un compteur externe au Gadget
et utiliser SetGadgetText(#SpinGadget, Str(Count))
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 12:36
par PAPIPP
OK
mais alors il faut limiter les valeurs < 140
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinGadget
EndEnumeration
Define Count = 140, Progression = 10
OpenWindow(#WinMain, x, y, 140, 50, "Spin Progress", #PB_Window_SystemMenu)
SpinGadget(#SpinGadget, 20, 10, 100, 25, 140, 1920, #PB_Spin_Numeric)
SetGadgetText(#SpinGadget, "140")
SetGadgetState(#SpinGadget, WindowWidth(#WinMain))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up : Count + 10
Case #PB_EventType_Down : Count - 10
EndSelect
if count<140
count=140
endif
SetGadgetText(#SpinGadget, Str(Count))
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, GetGadgetState(#SpinGadget), #PB_Ignore)
EndSelect
EndSelect
ForEver
A+
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 12:48
par ChrisR
ChrisR a écrit :C'est résolu avec le code de Falsam, en gérant avec son propre compteur. Parfait, merci


, le code fonctionne bien pour les flèches haut et bas mais malheureusement il n'est plus possible de saisir dans le SpinGadget.
J'ai cherché un peu mais j'ai pas réussi avec le SpinGadget seul. Une idée ?
J'ai contourné avec un StringGadget + SpinGadget. Y a t'il mieux a faire?
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#StringSpinGadget
#SpinGadget
EndEnumeration
Define Count = 140, Progress = 10, MinSpin, MaxSpin
OpenWindow(#WinMain, 0, 0, 140, 50, "Spin Progress", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(#StringSpinGadget, 20, 10, 80, 25, "140", #PB_String_Numeric)
SpinGadget(#SpinGadget, 100, 10, 18, 25, 0, 1920, #PB_Spin_Numeric)
MinSpin = GetGadgetAttribute(#SpinGadget, #PB_Spin_Minimum)
MaxSpin = GetGadgetAttribute(#SpinGadget, #PB_Spin_Maximum)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up
Count + Progress
If Count > MaxSpin : Count = MaxSpin : EndIf
Case #PB_EventType_Down
Count - Progress
If Count < MinSpin : Count = MinSpin : EndIf
Case #PB_EventType_Change
SetGadgetText(#StringSpinGadget, Str(Count))
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, Count, #PB_Ignore)
EndSelect
Case #StringSpinGadget
If EventType() = #PB_EventType_Change
Count = Val(GetGadgetText(#StringSpinGadget))
If Count < MinSpin : Count = MinSpin : SetGadgetText(#StringSpinGadget, Str(Count)) : EndIf
If Count > MaxSpin : Count = MaxSpin : SetGadgetText(#StringSpinGadget, Str(Count)) : EndIf
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, Count, #PB_Ignore)
EndIf
EndSelect
EndSelect
ForEver
Il me semblerait intéressant d'avoir la valeur de Deplacement (optionnel) en natif PB.
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 12:56
par ChrisR
@PAPIPP
Je ne sais pas comment il pourrait être fait pour utiliser une valeur mini, pas d'idée!
Si par exemple, on fixe 140 en mini et que l'on veut saisir 220, au premier 2 saisi au clavier, il envoie un event. Si on ajoute un contrôle < 140 a réception de l’événement, alors il remplace le premier 2 saisi par 140.
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 14:19
par Ar-S
Peut-être en utilisant If len( str(count)) > 2
Au début de code je remplacerai
Code : Tout sélectionner
MinSpin = GetGadgetAttribute(#SpinGadget, #PB_Spin_Minimum)
MaxSpin = GetGadgetAttribute(#SpinGadget, #PB_Spin_Maximum)
;par
MinSpin = 140
SetGadgetAttribute(#SpinGadget, #PB_Spin_Minimum, MinSpin )
Car ça ne sert à rien de descendre au dessous.
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 14:34
par ChrisR
Ar-S a écrit :Peut-être en utilisant If len( str(count)) > 2
Yep, merci
Code : Tout sélectionner
If Len(Str(count)) > 2 And Count < MinSpin : Count = MinSpin : SetGadgetText(#StringSpinGadget, Str(Count)) : EndIf
Re: Progression SpinGadget
Publié : mer. 22/mars/2017 16:43
par ChrisR
Le code final, merci
Code : Tout sélectionner
Enumeration FormGadget
#WinMain
#SpinStringGadget
#SpinGadget
EndEnumeration
Define Progress = 10
Define SpinCount, SpinMax, SpinMin, SpinMinLen
OpenWindow(#WinMain, 0, 0, 140, 50, "Spin Progress", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(#SpinStringGadget, 20, 10, 80, 25, "140", #PB_String_Numeric)
SpinGadget(#SpinGadget, 100, 10, 18, 25, 140, 1920, #PB_Spin_Numeric)
SpinCount = Val(GetGadgetText(#SpinStringGadget))
SpinMax = GetGadgetAttribute(#SpinGadget, #PB_Spin_Maximum)
SpinMin = GetGadgetAttribute(#SpinGadget, #PB_Spin_Minimum)
SpinMinLen = Len(Str(SpinMin))-1
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #SpinGadget
Select EventType()
Case #PB_EventType_Up
SpinCount + Progress
If SpinCount > SpinMax : SpinCount = SpinMax : EndIf
Case #PB_EventType_Down
SpinCount - Progress
If SpinCount < SpinMin : SpinCount = SpinMin : EndIf
EndSelect
SetGadgetText(#SpinStringGadget, Str(SpinCount))
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, SpinCount, #PB_Ignore)
Case #SpinStringGadget
If EventType() = #PB_EventType_Change
SpinCount = Val(GetGadgetText(#SpinStringGadget))
If Len(Str(SpinCount)) > SpinMinLen And SpinCount < SpinMin : SpinCount = SpinMin : SetGadgetText(#SpinStringGadget, Str(SpinCount)) : EndIf
If SpinCount > SpinMax : SpinCount = SpinMax : SetGadgetText(#SpinStringGadget, Str(SpinCount)) : EndIf
ResizeWindow(#WinMain, #PB_Ignore, #PB_Ignore, SpinCount, #PB_Ignore)
EndIf
EndSelect
EndSelect
ForEver