Exemple sliders modulaire

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Exemple sliders modulaire

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Exemple sliders modulaire

Message par GallyHC »

Merci pour cette exemple, j'en prend bonne note ^^.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Exemple sliders modulaire

Message par Micoute »

Bravo microdevweb, c'est du super travail, j'adore !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Exemple sliders modulaire

Message par falsam »

Joli ce potentiométre. Merci microdevweb.
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
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Exemple sliders modulaire

Message par Kwai chang caine »

Marche niquel, merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre