Page 1 sur 1

Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 11:47
par kernadec
bonjour
je sais, plus si quelqu'un l' as déjà fait??
Sinon Voilà un Petit essai de bouton potentiomètre :D

Cordialement

Code : Tout sélectionner

Procedure MouseWheelDelta() 
  mw.w = ((EventwParam()>>16)&$FFFF) 
  ProcedureReturn -(mw/100) 
EndProcedure 


Procedure rotatecone(i)
  If StartDrawing(CanvasOutput(0))
    Box(0, 0, 220, 220, RGB(100,100,100))
    Circle(110, 110, 104,RGB(250,0,0))
    DrawingMode(#PB_2DDrawing_Gradient) 
    BackColor(RGB(180,180,180))
    FrontColor($FFFFF0)
    ConicalGradient(110, 110, i)     
    Circle(110, 110, 100)
    StopDrawing() 
  EndIf
EndProcedure



If OpenWindow(0, 0, 0, 220, 220, " Rotate Cône" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 0,0,220, 220)
  
  rotatecone(1)
  
  Repeat 
    Event  = WaitWindowEvent()   
    Select Event 
        
      Case #WM_MOUSEWHEEL       
        i=i+(MouseWheelDelta()) 
        
        rotatecone(i*10)
        
    EndSelect 
  Until Event = #PB_Event_CloseWindow   
EndIf

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 17:41
par Backup
......

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:06
par Thyphoon
sympa,
juste pour m'amuser j'ai essayer de mettre le reglage du potentiomètre avec la molette de la souris... toujours le même problème il faut cliquer une fois dedans avant :P

Code : Tout sélectionner

;***********************************************
;Titre  :potentiometre_maison
;Auteur  : Dobro sur une base de kernadec
;Date  :19/10/2013
;Heure  :18:35:14
;Version Purebasic :  PureBasic 5.20 LTS (Windows - x8
;Version de l'editeur :EPB V2.48
; Libairies necessaire : Aucune 
;***********************************************

Declare  potentiometre(numero,x,y,info)



Enumeration
  #fenetre
  #potentiometre_1
  #potentiometre_2
EndEnumeration

Structure potar
  x.l
  y.l
  valeur.f
EndStructure
Global Dim potar.potar(2)





nombre_de_potar=2
Global Dim vale.f(nombre_de_potar) ; set pour le retour de valeur des potentiometres
; creation du potentiometre 1
potar(#potentiometre_1)\x=150 ; position x du potentiometre 1
potar(#potentiometre_1)\y=150; position y du potentiometre 1
potar(#potentiometre_1)\valeur.f=50 ; valeur initiale du potentiometre 1
potentiometre(#potentiometre_1,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0) ; creation du premier potentiometre


; creation du potentiometre 2
potar(#potentiometre_1)\x=450 ; position x du potentiometre 2
potar(#potentiometre_1)\y=150; position y du potentiometre 2
potar(#potentiometre_2)\valeur.f=10 ; valeur initiale du potentiometre 2
potentiometre(#potentiometre_2,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0) ;; creation du deuxieme potentiometre

Define change.b=#False
Repeat
  Event  = WaitWindowEvent(2)   
  change.b=#False
  Select Event
    Case #PB_Event_Gadget 
      ; ****************************************************************************************************************************************
      ;-potentiometre 1 
      ; ****************************************************************************************************************************************
      If EventGadget() = #potentiometre_1
        ;SetActiveGadget(#potentiometre_1)
        If EventType()=#PB_EventType_MouseWheel
          potar(#potentiometre_1)\valeur.f=potar(#potentiometre_1)\valeur.f+GetGadgetAttribute(#potentiometre_1,#PB_Canvas_WheelDelta)
          change=#True
        EndIf 
        
        If EventType() = #PB_EventType_LeftButtonDown  And GetGadgetAttribute(#potentiometre_1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
          potar(#potentiometre_1)\valeur.f=potar(#potentiometre_1)\valeur.f+10
          change=#True
        EndIf
        If EventType() = #PB_EventType_RightButtonDown  And GetGadgetAttribute(#potentiometre_1, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
          potar(#potentiometre_1)\valeur.f=potar(#potentiometre_1)\valeur.f-10
          change=#True
        EndIf
        If  change=#True
          If potar(#potentiometre_1)\valeur.f<0:potar(#potentiometre_1)\valeur.f=360:EndIf
          potentiometre(#potentiometre_1,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0)
          Debug "la valeur du potar est de :"+Str( potentiometre(#potentiometre_1,x,y,-1))
        EndIf
      EndIf
      ; ****************************************************************************************************************************************
      ;- potentiometre 2 
      ; ****************************************************************************************************************************************
      If EventGadget() = #potentiometre_2
        ;SetActiveGadget(#potentiometre_2)
        If EventType()=#PB_EventType_MouseWheel
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f+GetGadgetAttribute(#potentiometre_2,#PB_Canvas_WheelDelta)
          change=#True
        EndIf 
        If EventType() = #PB_EventType_LeftButtonDown  And GetGadgetAttribute(#potentiometre_2, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f+10
          change=#True
        EndIf
        If EventType() = #PB_EventType_RightButtonDown  And GetGadgetAttribute(#potentiometre_2, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f-10
          change=#True
        EndIf
        
        
        If potar(#potentiometre_2)\valeur.f>360:potar(#potentiometre_2)\valeur.f=0:EndIf
        potentiometre(#potentiometre_2,potar(#potentiometre_2)\x,potar(#potentiometre_2)\y,0)
        Debug "la valeur du potar2 est de :"+ Str(potentiometre(#potentiometre_2,potar(#potentiometre_2)\x,potar(#potentiometre_2)\y,-1)) ; en passant -1, on indique au potentiometre qu'on veux obtenir sa position actuelle
        
        
      EndIf
      ; ****************************************************************************************************************************************
  EndSelect
Until Event = #PB_Event_CloseWindow   



;- Procedure Zone

Procedure potentiometre(numero,x,y,info)
  If IsWindow(numero)=0
    OpenWindow(numero, x, y, 220, 220, " Potentiometre" , #PB_Window_SystemMenu|#PB_Window_BorderLess)
  EndIf
  If IsGadget(numero)=0
    CanvasGadget(numero, 0,0,220, 220,#PB_Canvas_DrawFocus|#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard|#PB_Canvas_Border)
  EndIf
  
  If info<>-1 ; si on passe une valeur de -1, c'est qu'on veux connaitre la valeur actuel du potentiometre
    
    If StartDrawing(CanvasOutput(numero)) And IsGadget(numero)<>0
      Box(0, 0, 220, 220, RGB(100,100,100))
      Circle(110, 110, 104,RGB(250,0,0))
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(180,180,180))
      FrontColor($FFFFF0)
      ConicalGradient(110, 110, potar(numero)\valeur.f)     
      Circle(110, 110, 100)
      StopDrawing()
    EndIf
    ; la taille en rond de la fenetre
    Region = CreateEllipticRgn_(5, 30, 222, 250) ; Création de la région pour faire une fenêtre elliptique (ronde)
    SetWindowRgn_(WindowID(numero), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
  Else
    ProcedureReturn potar(numero)\valeur.f
  EndIf
  
EndProcedure
; EPB

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:14
par Thyphoon
une autre tentative plus sympa pour regler le potentiometre...
ça marche que sur le n°1 clic dessus et bouge ta souris !! :P

Code : Tout sélectionner

;***********************************************
;Titre  :potentiometre_maison
;Auteur  : Dobro sur une base de kernadec
;Date  :19/10/2013
;Heure  :18:35:14
;Version Purebasic :  PureBasic 5.20 LTS (Windows - x8
;Version de l'editeur :EPB V2.48
; Libairies necessaire : Aucune 
;***********************************************

Declare  potentiometre(numero,x,y,info)



Enumeration
  #fenetre
  #potentiometre_1
  #potentiometre_2
EndEnumeration

Structure potar
  x.l
  y.l
  valeur.f
EndStructure
Global Dim potar.potar(2)





nombre_de_potar=2
Global Dim vale.f(nombre_de_potar) ; set pour le retour de valeur des potentiometres
; creation du potentiometre 1
potar(#potentiometre_1)\x=150 ; position x du potentiometre 1
potar(#potentiometre_1)\y=150; position y du potentiometre 1
potar(#potentiometre_1)\valeur.f=50 ; valeur initiale du potentiometre 1
potentiometre(#potentiometre_1,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0) ; creation du premier potentiometre


; creation du potentiometre 2
potar(#potentiometre_1)\x=450 ; position x du potentiometre 2
potar(#potentiometre_1)\y=150; position y du potentiometre 2
potar(#potentiometre_2)\valeur.f=10 ; valeur initiale du potentiometre 2
potentiometre(#potentiometre_2,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0) ;; creation du deuxieme potentiometre

Define change.b=#False
Repeat
  Event  = WaitWindowEvent(2)   

  Select Event
    Case #PB_Event_Gadget 
      ; ****************************************************************************************************************************************
      ;-potentiometre 1 
      ; ****************************************************************************************************************************************
      If EventGadget() = #potentiometre_1
        
        If EventType() = #PB_EventType_LeftButtonDown
          mx = GetGadgetAttribute(#potentiometre_1, #PB_Canvas_MouseX)
          my = GetGadgetAttribute(#potentiometre_1, #PB_Canvas_MouseY)
          mempotx.f=potar(#potentiometre_1)\valeur

        EndIf
        
        If GetGadgetAttribute(#potentiometre_1, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
          SetGadgetAttribute(#potentiometre_1,#PB_Canvas_Cursor,#PB_Cursor_Hand)
          potar(#potentiometre_1)\valeur=mempotx+(mx-GetGadgetAttribute(#potentiometre_1, #PB_Canvas_MouseX))
           If potar(#potentiometre_1)\valeur.f<0:potar(#potentiometre_1)\valeur.f=360:EndIf
          potentiometre(#potentiometre_1,potar(#potentiometre_1)\x,potar(#potentiometre_1)\y,0)
          Debug "la valeur du potar est de :"+Str( potentiometre(#potentiometre_1,x,y,-1))
        Else
          SetGadgetAttribute(#potentiometre_1,#PB_Canvas_Cursor,#PB_Cursor_Default)
        EndIf
        
      EndIf
      ; ****************************************************************************************************************************************
      ;- potentiometre 2 
      ; ****************************************************************************************************************************************
      If EventGadget() = #potentiometre_2
        ;SetActiveGadget(#potentiometre_2)
        If EventType()=#PB_EventType_MouseWheel
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f+GetGadgetAttribute(#potentiometre_2,#PB_Canvas_WheelDelta)
          change=#True
        EndIf 
        If EventType() = #PB_EventType_LeftButtonDown  And GetGadgetAttribute(#potentiometre_2, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f+10
          change=#True
        EndIf
        If EventType() = #PB_EventType_RightButtonDown  And GetGadgetAttribute(#potentiometre_2, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
          potar(#potentiometre_2)\valeur.f=potar(#potentiometre_2)\valeur.f-10
          change=#True
        EndIf
        
        
        If potar(#potentiometre_2)\valeur.f>360:potar(#potentiometre_2)\valeur.f=0:EndIf
        potentiometre(#potentiometre_2,potar(#potentiometre_2)\x,potar(#potentiometre_2)\y,0)
        Debug "la valeur du potar2 est de :"+ Str(potentiometre(#potentiometre_2,potar(#potentiometre_2)\x,potar(#potentiometre_2)\y,-1)) ; en passant -1, on indique au potentiometre qu'on veux obtenir sa position actuelle
        
        
      EndIf
      ; ****************************************************************************************************************************************
  EndSelect
Until Event = #PB_Event_CloseWindow   



;- Procedure Zone

Procedure potentiometre(numero,x,y,info)
  If IsWindow(numero)=0
    OpenWindow(numero, x, y, 220, 220, " Potentiometre" , #PB_Window_SystemMenu|#PB_Window_BorderLess)
  EndIf
  If IsGadget(numero)=0
    CanvasGadget(numero, 0,0,220, 220,#PB_Canvas_DrawFocus|#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard|#PB_Canvas_Border)
  EndIf
  
  If info<>-1 ; si on passe une valeur de -1, c'est qu'on veux connaitre la valeur actuel du potentiometre
    
    If StartDrawing(CanvasOutput(numero)) And IsGadget(numero)<>0
      Box(0, 0, 220, 220, RGB(100,100,100))
      Circle(110, 110, 104,RGB(250,0,0))
      DrawingMode(#PB_2DDrawing_Gradient)
      BackColor(RGB(180,180,180))
      FrontColor($FFFFF0)
      ConicalGradient(110, 110, potar(numero)\valeur.f)     
      Circle(110, 110, 100)
      StopDrawing()
    EndIf
    ; la taille en rond de la fenetre
    Region = CreateEllipticRgn_(5, 30, 222, 250) ; Création de la région pour faire une fenêtre elliptique (ronde)
    SetWindowRgn_(WindowID(numero), Region, #True) ; On applique la région
    DeleteObject_(Region) ; On supprime la région
  Else
    ProcedureReturn potar(numero)\valeur.f
  EndIf
  
EndProcedure
; EPB

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:18
par falsam
@Dobro : Ton code ne fonctionne pas sous window7. Le potentiomètre ne réagit pas à la molette de la souris.

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:21
par falsam
■ On trouve de magnifiques exemples de potentiomètres sur ce thread.
http://www.purebasic.fr/english/viewtop ... 12&t=54793

Image

■ Sans oubliez le Meter Gadget qui va avec sur ce thread.
http://www.purebasic.fr/english/viewtop ... 47#p409247

Image

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:23
par Thyphoon
falsam a écrit :@Dobro : Ton code ne fonctionne pas sous window7. Le potentiomètre ne réagit pas à la molette de la souris.
dans la doc il est marqué :

Code : Tout sélectionner

 Avec Windows, l'événement #PB_EventType_MouseWheel est renvoyé seulement 
         si le gadget a le focus clavier. Avec les autres OS, cet événement est renvoyé au gadget 
         sous le curseur, qu'il ait le focus clavier ou non. 
ça complique un peu la chose...

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:41
par Backup
falsam a écrit :@Dobro : Ton code ne fonctionne pas sous window7. Le potentiomètre ne réagit pas à la molette de la souris.
Dobro a écrit :ici , on utilise le click droit pour diminuer, et le click gauche pour augmenter
(n'oublie pas que sur les Portables , on a pas de roulette ;) )

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 18:49
par falsam
Dobro a écrit :n'oublie pas que sur les Portables , on a pas de roulette ;) )
Oooops je n'ai pas pensé à ceux qui ont un portable. (Et lu en diagonal la présentation de ton code :mrgreen: )

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 19:09
par kernadec
bonsoir
merci, sympa tout ces codes,
oops pareil... j'avais pas pensé non plus aux tablettes.

Cordialement

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 19:52
par Thyphoon
falsam a écrit :
Dobro a écrit :n'oublie pas que sur les Portables , on a pas de roulette ;) )
Oooops je n'ai pas pensé à ceux qui ont un portable. (Et lu en diagonal la présentation de ton code :mrgreen: )
souvent il suffit d'utiliser 2 doigts que tu glisses vers le haut ou vers le bas (Non il ne s'agit pas d'une explication pour trouver le point G :mrgreen: désolé en me relisant j'ai pas pu resister ! :oops: :P )
kernadec a écrit :bonsoir
oops pareil... j'avais pas pensé non plus aux tablettes.

Cordialement
) mais je me demande si sur une tablette le 2ème code que j'ai donné ne fonctionnerait pas (tu clic et tu bouge la souris )

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 20:33
par Backup
Thyphoon a écrit : souvent il suffit d'utiliser 2 doigts que tu glisses vers le haut ou vers le bas (Non il ne s'agit pas d'une explication pour trouver le point G :mrgreen: désolé en me relisant j'ai pas pu resister ! :oops: :P )
la fonction que tu decris aide a Scroller dans les pages , mais cela n'a rien a voir avec la roulette souris
le #WM_MOUSEWHEEL ne reponds pas a cette stimulation ! ;)
c'est bien pour ça que j'ai viré ta procedure de gestion de la roulette , sinon , je l'aurai laissé ;)

pour les touchpad , le Scroll est pris en charge par le Drivers de Touchpad

c'est completement deconnecté de la souris :)

il existe peut etre un #WM_PADWHEEL

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 20:35
par Thyphoon
Dobro a écrit : la fonction que tu decris aide a Scroller dans les pages , mais cela n'a rien a voir avec la roulette souris
le #WM_MOUSEWHEEL ne reponds pas a cette stimulation ! ;)
c'est bien pour ça que j'ai viré ta procedure de gestion de la roulette , sinon , je l'aurai laissé ;)
Il va falloir que je pense a passer a la tablette ... :D

Re: Potentiomètre avec ConicalGradient

Publié : sam. 19/oct./2013 20:37
par Backup
je parle pour un Portable moi hein .... :mrgreen: (celui la )

Image