Page 1 sur 1

Exemple sliders modulaire

Publié : ven. 22/avr./2016 13:41
par microdevweb
Bonjour à tous voila un petit code exemple de sliders modulaire

Image

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

Re: Exemple sliders modulaire

Publié : ven. 22/avr./2016 13:45
par GallyHC
Merci pour cette exemple, j'en prend bonne note ^^.

Cordialement,
GallyHC

Re: Exemple sliders modulaire

Publié : ven. 22/avr./2016 19:53
par Micoute
Bravo microdevweb, c'est du super travail, j'adore !

Re: Exemple sliders modulaire

Publié : sam. 23/avr./2016 12:05
par falsam
Joli ce potentiométre. Merci microdevweb.

Re: Exemple sliders modulaire

Publié : sam. 23/avr./2016 18:11
par Kwai chang caine
Marche niquel, merci 8)