Code : Tout sélectionner
;************************************************************************************************************************
; Author : MicrodevWeb
; Project Name : Demo module
; File Name : DemoModule.pb
;************************************************************************************************************************
;-* Données du projet structure/ list / map
DeclareModule myData
Structure pos
X.i
Y.i
W.i
H.i
EndStructure
Structure Sliders
name.s
idCanvas.i
myPos.pos
*CallBack
BgColor.i
FgColor.i
State.i
EndStructure
Global NewList mySliders.Sliders()
EndDeclareModule
Module myData
EndModule
;}
;-* Module sliders
DeclareModule sliders
Declare AddSlider(name.s,X,Y,W,H,BgColor,FgColor,*CallBack)
EndDeclareModule
Module sliders
EnableExplicit
; La je vais utiliser le module data sans devoir entrer son nom
UseModule myData
Global gMouseX,gMouseY,ClicOn.b=#False
Global OldMouseX,OldMousY,HoverSlider.b=#False,OldSate
Prototype.i Pro(Value,id)
;-* LOCAL PORCEDURE
Declare Draw()
Procedure WhereIsMonse()
Protected X=10,Y,W,H=6
HoverSlider=#False
With mySliders()\myPos
W=\W-20
Y=\H-(mySliders()\State+6)
If (gMouseX>=X And gMouseX<=(X+W)) And (gMouseY>=Y And gMouseY<=(Y+H))
SetGadgetAttribute(mySliders()\idCanvas,#PB_Canvas_Cursor,#PB_Cursor_Hand)
HoverSlider=#True
ProcedureReturn
EndIf
SetGadgetAttribute(mySliders()\idCanvas,#PB_Canvas_Cursor,#PB_Cursor_Default)
EndWith
EndProcedure
Procedure MoveSlider()
Protected DepY=OldMousY-gMouseY
Protected myPro.Pro=mySliders()\CallBack
mySliders()\State=OldSate+DepY
Draw()
myPro(mySliders()\State,ListIndex(mySliders()))
EndProcedure
Procedure Event()
;1) Je relève l'id du slidder sur lequel a lieu l'évenement
Protected *Id=GetGadgetData(EventGadget())
;2) je pointe sur la liste
ChangeCurrentElement(mySliders(),*Id)
;3) Je gère les évènement
Select EventType()
Case #PB_EventType_MouseMove
; Relève la position de la souris
gMouseX=GetGadgetAttribute(mySliders()\idCanvas,#PB_Canvas_MouseX)
gMouseY=GetGadgetAttribute(mySliders()\idCanvas,#PB_Canvas_MouseY)
If ClicOn And HoverSlider
MoveSlider()
ProcedureReturn
EndIf
WhereIsMonse()
Case #PB_EventType_LeftButtonDown
If Not ClicOn
OldMouseX=gMouseX
OldMousY=gMouseY
OldSate=mySliders()\State
ClicOn=#True
EndIf
Case #PB_EventType_LeftButtonUp
ClicOn=#False
EndSelect
EndProcedure
Procedure Draw()
StartDrawing(CanvasOutput(mySliders()\idCanvas))
With mySliders()\myPos
; Dessin du fond
DrawingMode(#PB_2DDrawing_Default)
Box(0,0,\W,\H,mySliders()\BgColor)
; Dessin du contour
DrawingMode(#PB_2DDrawing_Outlined)
Box(0,0,\W,\H,mySliders()\FgColor)
; Dessin du slider
DrawingMode(#PB_2DDrawing_Default)
Box(10,\H-(mySliders()\State+6),\W-20,6,mySliders()\FgColor)
EndWith
StopDrawing()
EndProcedure
;}
;-* PUBLIC PORCEDURE
Procedure AddSlider(name.s,X,Y,W,H,BgColor,FgColor,*CallBack)
; 1) ajout dans la liste
AddElement(mySliders())
With mySliders()
\name=name
\BgColor=BgColor
\FgColor=FgColor
\myPos\X=X
\myPos\Y=Y
\myPos\W=W
\myPos\H=H
\CallBack=*CallBack
; Au depart le niveau est à 0
\State=0
; 2) Création du canvas
\idCanvas=CanvasGadget(#PB_Any,X,Y,W,H)
; 3) ICI je mémorise dans le canvas le pointeur de la liste, pour la gestion de Event
SetGadgetData(\idCanvas,@mySliders())
;4) Je place le caalback event
BindGadgetEvent(\idCanvas,@Event())
EndWith
Draw()
; Je renvoie l'index de la liste, cela poura être ustiliser par d'autre paramètre
ProcedureReturn ListIndex(mySliders())
EndProcedure
;}
EndModule
;}
;-* MODULE mainForm
DeclareModule mainForm
Declare Open()
EndDeclareModule
Module mainForm
EnableExplicit
Global Form
Procedure Exit()
End
EndProcedure
Procedure EventSlider(Value,Id)
Debug "Le sqlider "+Str(Id)+" a la valeur "+Str(Value)
EndProcedure
Procedure Open()
Protected X=20
Form=OpenWindow(#PB_Any,0,0,800,600,"teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
BindEvent(#PB_Event_CloseWindow,@Exit(),Form)
; Ajout des sliders
sliders::AddSlider("Slider 1",X,20,50,300,$D1CE00,$000000,@EventSlider())
X+70
sliders::AddSlider("Slider 2",X,20,50,300,$00FF00,$000000,@EventSlider())
X+70
sliders::AddSlider("Slider 3",X,20,50,300,$00A5FF,$000000,@EventSlider())
X+70
sliders::AddSlider("Slider 3",X,20,50,300,$9314FF,$000000,@EventSlider())
EndProcedure
EndModule
mainForm::Open()
Repeat:WaitWindowEvent():ForEver