une autre tentative plus sympa pour regler le potentiometre...
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