Potentiomètre avec ConicalGradient

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Potentiomètre avec ConicalGradient

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Potentiomètre avec ConicalGradient

Message par Backup »

......
Dernière modification par Backup le lun. 18/août/2014 16:30, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Potentiomètre avec ConicalGradient

Message par falsam »

@Dobro : Ton code ne fonctionne pas sous window7. Le potentiomètre ne réagit pas à la molette de la souris.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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
Dernière modification par falsam le sam. 19/oct./2013 18:29, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Potentiomètre avec ConicalGradient

Message 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 ;) )
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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: )
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Potentiomètre avec ConicalGradient

Message par kernadec »

bonsoir
merci, sympa tout ces codes,
oops pareil... j'avais pas pensé non plus aux tablettes.

Cordialement
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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 )
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Potentiomètre avec ConicalGradient

Message 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
Dernière modification par Backup le sam. 19/oct./2013 20:36, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2697
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Potentiomètre avec ConicalGradient

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Potentiomètre avec ConicalGradient

Message par Backup »

je parle pour un Portable moi hein .... :mrgreen: (celui la )

Image
Répondre