SpinGadget

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

SpinGadget

Message par Le Soldat Inconnu »

2 points :

d'abord, j'ai l'impression que le spingadget est limitée à 65535 :? car dès que je dépasse cette valeur, il retourne à 0, ne serait-il pas possible de faire plus ?

ensuite, c'est au niveau de l'aide pas très explicite je trouve sur l'utilisation de la bête :wink:
elle ne montre pas comment gérer le texte tapé dans le spin par l'utilisateur, il y a juste un exemple pour se servir des flèche bas et haut puis mettre le texte en conséquence.
voilà un exemple qui je pense est plus complet :wink:

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.81
;
; Explication du programme :
; Gestion des évènements d'un SpinGadget

; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

; Création du SpinGadget
#SpinGadget_Test = 0
SpinGadget(#SpinGadget_Test, 10, 10, 100, 20, 0, 200)

; On initialise le SpinGadget
SetGadgetState(#SpinGadget_Test, 0)
SetGadgetText(#SpinGadget_Test, "0")

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget ; Si on a un évènement sur un gadget
    Select EventGadgetID()
      Case #SpinGadget_Test ; Evènement sur le SpinGadget
        
        If GetGadgetText(#SpinGadget_Test) <> Str(GetGadgetState(#SpinGadget_Test)) ; Si le contenu à changer
          ; Quand on modifie l'état du SpinGadget, on a une différence entre le texte affiché et l'état du SpinGadget
          
          If EventType() = #PB_EventType_Change ; Si on a changé le texte du SpinGadget
            
            SetGadgetState(#SpinGadget_Test, Val(GetGadgetText(#SpinGadget_Test))) ; On met l'état du SpinGadget égal au texte
            
            If GetGadgetText(#SpinGadget_Test) <> Str(GetGadgetState(#SpinGadget_Test)) ; Si l'état est différent du texte, on a entré une valeur supérieure aux bornes du SpinGadget
              SetGadgetText(#SpinGadget_Test, Str(GetGadgetState(#SpinGadget_Test))) ; On met le texte égal à l'état du SpinGadget
            EndIf
            
          Else ; Sinon, on a changé l'état à l'aide des boutons de défilements
            
            SetGadgetText(#SpinGadget_Test, Str(GetGadgetState(#SpinGadget_Test))) ; On met le texte égal à l'état du SpinGadget
            
          EndIf
          
        EndIf
        
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ouais tu as raison il est bien limité à 65535...
et ce n'est effectivement pas dit. ya bien que fred qui pourrait élever cette valeur au niveau d'un 'long'. a moins que ce soit une limitation de l'api win32. faut essayer avec des fonctions windows et pas purebasic pour voir.

les messieurs de microsoft disent çà :
http://msdn.microsoft.com/library/defau ... ontrol.asp

Code : Tout sélectionner

HWND CreateUpDownControl(          DWORD dwStyle,
    int x,
    int y,
    int cx,
    int cy,
    HWND hParent,
    int nID,
    HINSTANCE hInst,
    HWND hBuddy,
    int nUpper,
    int nLower,
    int nPos
);
Parameters

dwStyle
Window styles for the control. This parameter should include the WS_CHILD, WS_BORDER, and WS_VISIBLE styles, and it may include any of the window styles specific to the up-down control. 
x
Horizontal coordinate, in client coordinates, of the upper-left corner of the control. 
y
Vertical coordinate, in client coordinates, of the upper-left corner of the control. 
cx
Width, in pixels, of the up-down control. 
cy
Height, in pixels, of the up-down control. 
hParent
Handle to the parent window of the up-down control. 
nID
Identifier for the up-down control. 
hInst
Handle to the module instance of the application creating the up-down control. 
hBuddy
Handle to the window associated with the up-down control. If this parameter is NULL, the control has no buddy window. 
nUpper
Upper limit (range) of the up-down control. 
nLower
Lower limit (range) of the up-down control. 
nPos
Position of the control. 
et un exemple :

Code : Tout sélectionner

OpenWindow(0,100,100,200,100,#PB_Window_SystemMenu,"Spin") 
CreateGadgetList(WindowID()) 
StringGadget(1,10,10,80,20,"")

max = $7fff;+1
CreateUpDownControl_($560000A6,0,0,0,0,WindowID(),1,GetModuleHandle_(0),GadgetID(1),max,0,max) 

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow 
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Ton code ne fonctionne pas le Soldat,

Si on change la valeur Min, ça deconne complètement.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

si tu changes la valeur min, oublie pas l'initialisation également.
chez moi, ça marche, pas vu de problème
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Heu, j'aurais du précisé si je change la valeur min et que j'essai de rentré une valeur dans le champ du string, ça ne marche pas et toi?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

si ça marche mais c'est pas très souple car si on met 20 en min par exemple, tu ne pas effacé un caractère sinon, ça remet 20 directement

pour palier ce genre de problème, on peut utiliser le code suivant :
http://purebasic.hmt-forum.com/viewtopic.php?t=735
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Si on met autre chose que zero pour valeur min, la saisi ne fonctionne pas. La solution du delay n'est pas très convenable, une valeur qui change toute seul sans prévenir!, la solution est peut être de rajouter un bouton pour valider les saisies, en général il en faudra un de toute façon.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

chez moi, ça marche :?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre