Code du potar Slider, [Resolu] OpenWindow et molette

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Code du potar Slider, [Resolu] OpenWindow et molette

Message par GallyHC »

Bonjour,

Voila la nouvelle version de mon gadget, maintenant on peu faire aussi une selection multiple des potars en appuyant sur la touche "contrôle" (Faut encore que j'ameliore) et d'autre choses :)

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  WheelZoom.l
  forecolor.l
  backcolor.l
  regulatory.l
  disable.b
  actived.b
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure
;}
;{ - CONSTANTES GLOBALS
Global lWBackGround.l = 0
Global lEBackGround.l = 0
Global numDMXSlider.l = 0
Global numDMXCTLSel.l = 0
Global numDMXALTSel.l = 0
Global maxDMXCTLSel.l = 1024
Global maxDMXALTSel.l = 1024
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global Dim DMXCTLSel.l(maxDMXCTLSel)
Global Dim DMXALTSel.l(maxDMXALTSel)
;}
;{ - CONSTANTE
#DMX_No_Select            = -1
#DMX_Multi_Select         = -2
#DMXSlider_Color_01       = $8E6235
#DMXSlider_Color_02       = $E9D6C2
#DMXSlider_Color_03       = $D5B08C
#DMXSlider_Color_04       = $F9F3ED
#DMXSlider_Color_05       = $B88957
#DMXSlider_Color_06       = $DCBD9E
#DMXSlider_Color_07       = $E6D0B9
#DMXSlider_Color_08       = $E9D6C2
#DMX_Color_Default        = -1
#DMX_Color_White          = $FFFFFF
#DMX_Color_Gray           = $000000
#DMX_Color_Red            = $0000FF
#DMX_Color_Green          = $00FF00
#DMX_Color_Blue           = $FF0000
#DMX_Color_Cyan           = $FFFF00
#DMX_Color_Purple         = $FF00FF
#DMX_Color_Yellow         = $00FFFF
#DMX_Zoom_x1              = 1
#DMX_Zoom_x2              = 2
#DMX_Zoom_x4              = 4
#DMX_Zoom_x8              = 8
#DMX_Zoom_x16             = 16
#DMX_Zoom_x32             = 32
#DMX_Block_Minimum        = 0
#DMX_Block_Maximum        = 1
#DMX_Regulatory_Off       = 0
#DMX_Regulatory_On        = 1
#DMX_Regulatory_progress  = 2
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - DECLARE FUNCTION
Declare.l SetColorSubstitute(color.l, finalcolor.l)
Declare.l SetFindDMXGadget(gadget.l)
Declare SetDrawSlider_Regulatory(gadget.l)
Declare SetDrawSlider_Button(gadget.l)
Declare SetDrawSlider_FullDraw(gadget.l)
Declare DMXGadget_Slider(gadget.l, x.l, y.l, w.l, h.l, value.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default, backcolor.l=#DMX_Color_Default)
Declare.b DMXGadget_DeleteArray(value.l)
Declare.l DMXGadget_CountMultiSelect()
Declare.l DMXGadget_ValueMultiSelect(value.l)
Declare.b DMXGadget_IsALTSelected(gadget.l)
Declare.b DMXGadget_IsCTLSelected(gadget.l)
Declare.l DMXGadget_EventType(event.l, evenp.l, eveng.l)
Declare WheelZoomDMXGadget(gadget.l, zoom.l = 0)
Declare.l GetDMXGadgetState(gadget.l)
Declare SetDMXGadgetState(gadget.l, value.l)
Declare.l GetDMXGadgetColor(gadget.l, colortype.l)
Declare SetDMXGadgetColor(gadget.l, colortype.l, color.l)
Declare DisableDMXGadget(gadget.l, etat.l)
Declare HideDMXGadget(gadget.l, etat.l)
Declare.l GetDMXGadgetAttribute(gadget.l, attribut.l)
Declare SetDMXGadgetAttribute(gadget.l, attribut.l, value.l)
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DE CHARGEMENT DES POLICES. 

Procedure GetLenPolice(lPolice.l)
; ROUTINE DE RECHERCHE DE LA TAILLE DE LA POLICE.
  Define lhDC.l = GetDC_(#Null)
  Define lPpp.l = GetDeviceCaps_(lhDC, #LOGPIXELSX)
  Define lres.l = ReleaseDC_(#Null, lhDC)
  If lPolice < 8
    Define fpas.f = (96 * 1.01) / lPpp
  Else
    Define fpas.f = (96 * 1.1) / lPpp
  EndIf
  ProcedureReturn Int(lPolice * fpas)

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DES INCLUDES DU PROGRAMME. 

;{ - POLICE
Global Font_DMXSlider_ID1 = LoadFont(#PB_Any, "Century Gothic", GetLenPolice(8), #PB_Font_HighQuality | #PB_Font_Bold)
Global Font_DMXSlider_ID2 = LoadFont(#PB_Any, "Century Gothic", GetLenPolice(7), #PB_Font_HighQuality | #PB_Font_Bold)
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INFORMATION SUR LES FENETRES WINDOWS.

Procedure GetWindowBackgroundColor()
; ROUTINE DE RECHERCHE DE LA COULEUR DE FOND.
  ProcedureReturn GetSysColor_(#COLOR_3DFACE)

EndProcedure

Procedure GetElementBackgroundColor()
; ROUTINE DE RECHERCHE DE LA COULEUR DE FOND.
  ProcedureReturn GetSysColor_(#COLOR_WINDOW )

EndProcedure

lWBackGround = GetWindowBackgroundColor()
lEBackGround = GetElementBackgroundColor()

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DE MOFIFICATION DES COULEURS.
Procedure.l SetColorSubstitute(color.l, finalcolor.l)
; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l

  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;-ROUTINE DE RECHERCHE DU DMX SLIDER.

Procedure.l SetFindDMXGadget(gadget.l)
; ROUTINE DE RECHERCHE DU GADGET DMX SLIDER.
  Define i.l

  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn #DMX_No_Select

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE D'AFFICHAGE DES DMX SLIDER.

Procedure SetDrawSlider_Regulatory(gadget.l)
; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected j.l
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > #DMX_No_Select
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        If DMXSlider(i)\disable = 1
          Couleur(0) = SetColorSubstitute(#DMXSlider_Color_01,   #DMX_Color_White)
          Couleur(1) = SetColorSubstitute(#DMXSlider_Color_02,   #DMX_Color_White)
          Couleur(2) = SetColorSubstitute(#DMXSlider_Color_03,   #DMX_Color_White)
          If DMXSlider(i)\backcolor = -1
            Couleur(3) = SetColorSubstitute(#DMXSlider_Color_04, #DMX_Color_Gray)
          Else
            Couleur(3) = DMXSlider(i)\backcolor
          EndIf
          Couleur(4) = SetColorSubstitute(#DMXSlider_Color_05,   #DMX_Color_White)
          Couleur(5) = SetColorSubstitute(#DMXSlider_Color_06,   #DMX_Color_White)
          Couleur(6) = SetColorSubstitute(#DMXSlider_Color_07,   #DMX_Color_White)
          Couleur(7) = SetColorSubstitute(#DMXSlider_Color_08,   #DMX_Color_White)
        Else
          Couleur(0) = SetColorSubstitute(#DMXSlider_Color_01,   #DMX_Color_Gray)
          Couleur(1) = SetColorSubstitute(#DMXSlider_Color_02,   #DMX_Color_Gray)
          Couleur(2) = SetColorSubstitute(#DMXSlider_Color_03,   #DMX_Color_Gray)
          If DMXSlider(i)\backcolor = -1
            Couleur(3) = SetColorSubstitute(#DMXSlider_Color_04, #DMX_Color_Gray)
          Else
            Couleur(3) = DMXSlider(i)\backcolor
          EndIf
          Couleur(4) = SetColorSubstitute(#DMXSlider_Color_05,   #DMX_Color_Gray)
          Couleur(5) = SetColorSubstitute(#DMXSlider_Color_06,   #DMX_Color_Gray)
          Couleur(6) = SetColorSubstitute(#DMXSlider_Color_07,   #DMX_Color_Gray)
          Couleur(7) = SetColorSubstitute(#DMXSlider_Color_08,   #DMX_Color_Gray)
        EndIf
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        If DMXGadget_IsCTLSelected(gadget) = #False Or DMXSlider(i)\disable = 1
          Box(0, 0, w, h, Couleur(3))
        Else
          Box(0, 0, w, h, $0000FF)
          Box(1, 1, w - 2, h - 2, Couleur(3))
        EndIf
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2), Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc, Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc, Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc, Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc, Couleur(1))
        Select DMXSlider(i)\regulatory
          Case #DMX_Regulatory_On
            tmpb = DMXSlider(i)\max - DMXSlider(i)\min
            pasa = (h - (tmpc * 2)) / tmpb
            For j=0 To h - (tmpc * 2)
              LineXY(0, tmpc + j, tmpa - 4, tmpc + j, Couleur(2))
              LineXY(0, tmpc + j + 1, tmpa - 4, tmpc + j + 1, Couleur(7))
              LineXY(tmpa + 4, tmpc + j, w, tmpc + j, Couleur(2))
              LineXY(tmpa + 4, tmpc + j + 1, w, tmpc + j + 1, Couleur(7))
              j + (pasa * 10)
            Next j
          Case #DMX_Regulatory_progress
            tmpb = DMXSlider(i)\max - DMXSlider(i)\min
            pasa = (h - (tmpc * 2)) / tmpb
            For j=0 To h - (tmpc * 2)
              LineXY(0, tmpc + j, tmpa - 4, tmpc + j, Couleur(2))
              LineXY(0, tmpc + j + 1, tmpa - 4, tmpc + j + 1, Couleur(7))
              j + (pasa * 10)
            Next j
            LineXY(tmpa + 4, tmpc, w, tmpc, Couleur(2))
            LineXY(tmpa + 4, tmpc, tmpa + 4, tmpc + (h - (tmpc * 2) - 1), Couleur(2))
            LineXY(w - 1, tmpc, tmpa + 4, tmpc + (h - (tmpc * 2) - 1), Couleur(2))
            FillArea(tmpa + 5, tmpc + 1, Couleur(2), Couleur(2))
        EndSelect
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected j.l
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > #DMX_No_Select
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\disable = 1
          Couleur(0) = SetColorSubstitute(#DMXSlider_Color_01, #DMX_Color_White)
          Couleur(1) = SetColorSubstitute(#DMXSlider_Color_02, #DMX_Color_White)
          Couleur(2) = SetColorSubstitute(#DMXSlider_Color_03, #DMX_Color_White)
          Couleur(3) = SetColorSubstitute(#DMXSlider_Color_04, #DMX_Color_White)
          Couleur(4) = SetColorSubstitute(#DMXSlider_Color_05, #DMX_Color_White)
          Couleur(5) = SetColorSubstitute(#DMXSlider_Color_06, #DMX_Color_White)
          Couleur(6) = SetColorSubstitute(#DMXSlider_Color_07, #DMX_Color_White)
          Couleur(7) = SetColorSubstitute(#DMXSlider_Color_08, #DMX_Color_White)
        Else
          If DMXSlider(i)\forecolor = -1
            Couleur(0) = #DMXSlider_Color_01
            Couleur(1) = #DMXSlider_Color_02
            Couleur(2) = #DMXSlider_Color_03
            Couleur(3) = #DMXSlider_Color_04
            Couleur(4) = #DMXSlider_Color_05
            Couleur(5) = #DMXSlider_Color_06
            Couleur(6) = #DMXSlider_Color_07
            Couleur(7) = #DMXSlider_Color_08
          Else
            Couleur(0) = SetColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\forecolor)
            Couleur(1) = SetColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\forecolor)
            Couleur(2) = SetColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\forecolor)
            Couleur(3) = SetColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\forecolor)
            Couleur(4) = SetColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\forecolor)
            Couleur(5) = SetColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\forecolor)
            Couleur(6) = SetColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\forecolor)
            Couleur(7) = SetColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\forecolor)
          EndIf
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For j = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, j, w - 2, j, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - j, w - 2, (w + tmpa - 1) - j, RGB(mula, mulb, mulc))
        Next j
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For j = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + j, w - 4, tmpb + 1 + j, RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - j, w - 4, (w + tmpa) - tmpb - 2 - j, RGB(mula, mulb, mulc))
        Next j
        LineXY(1, (w + tmpa) / 2, w - 2, (w + tmpa) / 2, Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure SetDrawSlider_FullDraw(gadget.l)
; ROUTINE DE TRACAGE DU DMX SILDER COMPLET.
  Protected i.l   = SetFindDMXGadget(gadget)

  If DMXSlider(i)\actived = #True And DMXSlider(i)\lCanva_01 <> 0
    If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
      If DMXSlider(i)\lImage_01 <> 0
        DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
      EndIf
      If DMXSlider(i)\lImage_02 <> 0
        DrawImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
      EndIf
      StopDrawing()
    EndIf
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DE CREATION DE LA GADGETLIST.

Procedure DMXGadget_Slider(gadget.l, x.l, y.l, w.l, h.l, value.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default, backcolor.l=#DMX_Color_Default)
;
; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf

  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If w < 15
    w = 15
  EndIf
  If h < 30
    h = 30
  EndIf
  If value < 0
    value = 0
  EndIf
  If value > max
    value = max
  EndIf
  tmps = w + (w / 10)

  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget     = gadget
  DMXSlider(j)\x          = x
  DMXSlider(j)\y          = y
  DMXSlider(j)\w          = w
  DMXSlider(j)\h          = h
  DMXSlider(j)\pas        = (max - min) / (h - tmps)
  DMXSlider(j)\min        = min
  DMXSlider(j)\max        = max
  DMXSlider(j)\WheelZoom  = #DMX_Zoom_x1
  DMXSlider(j)\state      = (-value + (DMXSlider(j)\max - DMXSlider(j)\min)) / DMXSlider(j)\pas
  DMXSlider(j)\value      = value + min
  DMXSlider(j)\forecolor  = color
  If backcolor = #DMX_Color_Default
    DMXSlider(j)\backcolor  = lWBackGround
  Else
    DMXSlider(j)\backcolor  = backcolor
  EndIf    
    DMXSlider(j)\disable    = 0
  DMXSlider(j)\regulatory = #DMX_Regulatory_On
  DMXSlider(j)\actived    = #True

  ;
  ; ROUTINE DE TACAGE DU DMX SLIDER GADGET.
  ;
  If DMXSlider(i)\lCanva_01 <> 0
    FreeGadget(DMXSlider(i)\lCanva_01)  
  EndIf
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard | #PB_Canvas_ClipMouse)
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  SetDrawSlider_FullDraw(DMXSlider(j)\gadget)

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DE GESTION DES SELECTIONS.

Procedure.b DMXGadget_DeleteArrayALT(value.l)
; ROUTINE DE SUPPRESSION D'UNE VALEUR DANS LE TABLEAU.
  Protected i.l
  
  If value = numDMXALTSel
    numDMXALTSel - 1
  Else
    numDMXALTSel - 1
    For i=value To numDMXALTSel
      DMXALTSel(i) = DMXALTSel(i + 1)
    Next i
  EndIf
  
EndProcedure

Procedure.b DMXGadget_DeleteArrayCTL(value.l)
; ROUTINE DE SUPPRESSION D'UNE VALEUR DANS LE TABLEAU.
  Protected i.l
  
  If value = numDMXCTLSel
    numDMXCTLSel - 1
  Else
    numDMXCTLSel - 1
    For i=value To numDMXCTLSel
      DMXCTLSel(i) = DMXCTLSel(i + 1)
    Next i
  EndIf
  
EndProcedure

Procedure.l DMXGadget_CountMultiSelect()
; ROUTINE DU NOMBRE DE POTENTIOMETRE SELECTIONNE.
  ProcedureReturn numDMXCTLSel

EndProcedure

Procedure.l DMXGadget_ValueMultiSelect(value.l)
; ROUTINE DE RECHERCHE DES POTENTIOMETRE SELECTIONNE.
  If numDMXCTLSel > 0 And numDMXCTLSel >= value
    ProcedureReturn DMXCTLSel(value)
  EndIf
  ProcedureReturn #DMX_No_Select

EndProcedure

Procedure.b DMXGadget_IsCTLSelected(gadget.l)
; ROUTINE DE RECHERCHE DE SELECTION.
  Protected i.l = SetFindDMXGadget(gadget)
  Protected j.l
  Protected k.b = #False

  If numDMXCTLSel > 0
    For j=1 To numDMXCTLSel
      If DMXCTLSel(j) = i
        k = j
        Break
      EndIf
    Next j
  EndIf
  ProcedureReturn k

EndProcedure

Procedure.b DMXGadget_IsALTSelected(gadget.l)
; ROUTINE DE RECHERCHE DE SELECTION.
  Protected i.l = SetFindDMXGadget(gadget)
  Protected j.l
  Protected k.b = #False

  If numDMXALTSel > 0
    For j=1 To numDMXALTSel
      If DMXALTSel(j) = i
        k = j
        Break
      EndIf
    Next j
  EndIf
  ProcedureReturn k

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DES EVENNEMENTS DU DMX SLIDER.

Procedure.l DMXGadget_EventType(event.l, evenp.l, eveng.l)
;
  Protected i.l
  Protected j.l
  Protected k.l
  Protected lMosY.l

  If event = #PB_Event_Gadget
    For i=1 To numDMXSlider
      If eveng = DMXSlider(i)\lCanva_01
        If DMXSlider(i)\disable = 0 Or DMXSlider(i)\actived = #False
          If GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Modifiers) & #PB_Canvas_Alt And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
            k = DMXGadget_IsCTLSelected(DMXSlider(i)\gadget)
            If k <> #False
              DMXGadget_DeleteArrayALT(k)
              SetDrawSlider_Regulatory(DMXSlider(i)\gadget)
              SetDrawSlider_FullDraw(DMXSlider(i)\gadget)
            EndIf
            ProcedureReturn #DMX_No_Select
          EndIf
          If GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Modifiers) & #PB_Canvas_Alt And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
            ProcedureReturn #DMX_No_Select
          EndIf
          If GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Modifiers) & #PB_Canvas_Control And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_RightButton
            k = DMXGadget_IsCTLSelected(DMXSlider(i)\gadget)
            If k <> #False
              DMXGadget_DeleteArrayCTL(k)
              SetDrawSlider_Regulatory(DMXSlider(i)\gadget)
              SetDrawSlider_FullDraw(DMXSlider(i)\gadget)
            EndIf
            ProcedureReturn #DMX_No_Select
          EndIf
          If GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_RightButton And numDMXCTLSel > 0
            For j=1 To numDMXCTLSel
              If DMXCTLSel(j) <> #DMX_No_Select
                k = DMXCTLSel(j)
                DMXCTLSel(j) = #DMX_No_Select
                SetDrawSlider_Regulatory(k)
                SetDrawSlider_FullDraw(k)
              EndIf
            Next j
            numDMXCTLSel = 0
            ProcedureReturn #DMX_No_Select
          EndIf
          If GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Modifiers) & #PB_Canvas_Control And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
            If DMXGadget_IsCTLSelected(DMXSlider(i)\gadget) = #False
              numDMXCTLSel + 1
              If numDMXCTLSel <= maxDMXCTLSel
                DMXCTLSel(numDMXCTLSel) = DMXSlider(i)\gadget
                If numDMXCTLSel > 1
                  DMXSlider(i)\value = DMXSlider(DMXCTLSel(1))\value
                  DMXSlider(i)\state = DMXSlider(DMXCTLSel(1))\state
                EndIf
                SetDrawSlider_Regulatory(DMXSlider(i)\gadget)
                SetDrawSlider_FullDraw(DMXSlider(i)\gadget)
                ProcedureReturn DMXSlider(i)\gadget
              EndIf
            EndIf
            ProcedureReturn #DMX_No_Select
          EndIf
          If DMXGadget_IsCTLSelected(DMXSlider(i)\gadget) = #False And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
            If numDMXCTLSel > 0
              For j=1 To numDMXCTLSel
                If DMXCTLSel(j) <> #DMX_No_Select
                  k = DMXCTLSel(j)
                  DMXCTLSel(j) = #DMX_No_Select
                  SetDrawSlider_Regulatory(k)
                  SetDrawSlider_FullDraw(k)
                EndIf
              Next j
              numDMXCTLSel = 0
            EndIf
          EndIf
          If evenp = #PB_EventType_MouseWheel
            DMXSlider(i)\value = DMXSlider(i)\value + (GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\WheelZoom) * DMXSlider(i)\pas
            If DMXSlider(i)\value < DMXSlider(i)\min
              DMXSlider(i)\value = DMXSlider(i)\min
            ElseIf DMXSlider(i)\value > DMXSlider(i)\max
              DMXSlider(i)\value = DMXSlider(i)\max
            EndIf
            DMXSlider(i)\state = (DMXSlider(i)\min - DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
            SetDrawSlider_FullDraw(DMXSlider(i)\gadget)
            If numDMXCTLSel > 0
              For j=1 To numDMXCTLSel
                If DMXCTLSel(j) <> #DMX_No_Select And DMXCTLSel(j) <> i
                  DMXSlider(SetFindDMXGadget(DMXCTLSel(j)))\value = DMXSlider(i)\value
                  DMXSlider(SetFindDMXGadget(DMXCTLSel(j)))\state = DMXSlider(i)\state
                  SetDrawSlider_FullDraw(DMXCTLSel(j))
                EndIf
              Next j
            EndIf
            If numDMXCTLSel = 0
              ProcedureReturn DMXSlider(i)\gadget
            Else
              ProcedureReturn #DMX_Multi_Select
            EndIf
          EndIf
          If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY) - (DMXSlider(i)\hb / 2)
            If lMosY < 0
              lMosY = 0
            EndIf
            If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
            Else
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
            EndIf
            If lMosY > (DMXSlider(i)\h - (DMXSlider(i)\hb))
              lMosY = DMXSlider(i)\h - DMXSlider(i)\hb
            EndIf
            DMXSlider(i)\state = lMosY
            SetDrawSlider_FullDraw(DMXSlider(i)\gadget)
            If numDMXCTLSel > 0
              For j=1 To numDMXCTLSel
                If DMXCTLSel(j) <> #DMX_No_Select And DMXCTLSel(j) <> i
                  DMXSlider(SetFindDMXGadget(DMXCTLSel(j)))\value = DMXSlider(i)\value
                  DMXSlider(SetFindDMXGadget(DMXCTLSel(j)))\state = DMXSlider(i)\state
                  SetDrawSlider_FullDraw(DMXCTLSel(j))
                EndIf
              Next j
            EndIf
            If numDMXCTLSel = 0
              ProcedureReturn DMXSlider(i)\gadget
            Else
              ProcedureReturn #DMX_Multi_Select
            EndIf
          EndIf
        EndIf
      EndIf
    Next i
  EndIf
  ProcedureReturn #DMX_No_Select

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- PROPRIETE DU GAGDET DMX SLIDER.

Procedure WheelZoomDMXGadget(gadget.l, zoom.l = 0)
; ROUTINE DE CHANGEMENT DU PAS DE LA MOLETTE SOURIS.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    Select zoom
      Case 0
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
      Case 1
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x2
      Case 2
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x4
      Case 3
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x8
      Case 4
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x16
      Case 5
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x32
      Default
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
    EndSelect
  EndIf

EndProcedure

Procedure.l GetDMXGadgetState(gadget.l)
; ROUTINE DE RECUPERATION DU LA VALEUR DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    ProcedureReturn DMXSlider(i)\value
  EndIf

EndProcedure

Procedure SetDMXGadgetState(gadget.l, value.l)
; ROUTINE DE CHANGEMENT DE LA VALEUR DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    If value < DMXSlider(i)\min
      value = DMXSlider(i)\min
    ElseIf value > DMXSlider(i)\max
      value = DMXSlider(i)\max
    EndIf
    DMXSlider(i)\value = value
    If DMXSlider(i)\min = 0
      DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas)
    Else
      DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas) - 2
    EndIf
    SetDrawSlider_FullDraw(gadget)
  EndIf

EndProcedure

Procedure.l GetDMXGadgetColor(gadget.l, colortype.l)
; ROUTINE DE RECUPERATION DES COULEURS DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    Select colortype
      Case #PB_Gadget_FrontColor
        ProcedureReturn DMXSlider(i)\forecolor
      Case #PB_Gadget_BackColor
        ProcedureReturn DMXSlider(i)\backcolor
    EndSelect
  EndIf

EndProcedure

Procedure SetDMXGadgetColor(gadget.l, colortype.l, color.l)
; ROUTINE DE CHANGEMENT DES COULEURS DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    Select colortype
      Case #PB_Gadget_FrontColor
        DMXSlider(i)\forecolor = color
        SetDrawSlider_Button(gadget)
        SetDrawSlider_FullDraw(gadget)
      Case #PB_Gadget_BackColor
        DMXSlider(i)\backcolor = color
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
    EndSelect
  EndIf

EndProcedure

Procedure ResizeDMXGadget(gadget.l, x.l, y.l, w.l, h.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    If x <> #PB_Ignore Or y <> #PB_Ignore Or w <> #PB_Ignore Or h <> #PB_Ignore
      If x <> #PB_Ignore
        DMXSlider(i)\x = x
      EndIf
      If y <> #PB_Ignore
        DMXSlider(i)\y = y
      EndIf
      If w <> #PB_Ignore
        DMXSlider(i)\w = w
      EndIf
      If h <> #PB_Ignore
        DMXSlider(i)\h = h
      EndIf
      ;SetDrawSlider_Button(gadget)
      ;SetDrawSlider_Regulatory(gadget)
      ;SetDrawSlider_FullDraw(gadget)
      ResizeGadget(DMXSlider(i)\lCanva_01, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h)  
    EndIf
  EndIf

EndProcedure

Procedure DisableDMXGadget(gadget.l, etat.l)
; ROUTINE D'ACTIVATION/DESACTIVATION DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    If DMXSlider(i)\disable <> etat
      DMXSlider(i)\disable = etat
      SetDrawSlider_Button(gadget)
      SetDrawSlider_Regulatory(gadget)
      SetDrawSlider_FullDraw(gadget)
    EndIf
  EndIf

EndProcedure

Procedure HideDMXGadget(gadget.l, etat.l)
; ROUTINE DE SUPPRESSION DU GADGET SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)

  If i > #DMX_No_Select
    Select etat
      Case 0
        HideGadget(DMXSlider(i)\lCanva_01, 0)
      Case 1
        HideGadget(DMXSlider(i)\lCanva_01, 1)
    EndSelect
  EndIf
  
EndProcedure
  
Procedure FreeDMXGadget(gadget.l)
; ROUTINE DE SUPPRESSION DU GADGET SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    DMXSlider(i)\actived = #False
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    If DMXSlider(i)\lCanva_01 <> 0
      FreeGadget(DMXSlider(i)\lCanva_01)
    EndIf 
  EndIf

EndProcedure

Procedure.l GetDMXGadgetAttribute(gadget.l, attribut.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > #DMX_No_Select
    Select attribut
      Case #PB_ScrollBar_Minimum
        ProcedureReturn DMXSlider(i)\min
      Case #PB_ScrollBar_Maximum
        ProcedureReturn DMXSlider(i)\max
    EndSelect
  EndIf

EndProcedure

Procedure SetDMXGadgetAttribute(gadget.l, attribut.l, value.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected tmps.l
  Protected tmpv.l

  If i > #DMX_No_Select
    Select attribut
      Case #PB_ScrollBar_Minimum
        If value > DMXSlider(i)\max
          value = DMXSlider(i)\max
        EndIf
        tmpv = DMXSlider(i)\value
        If tmpv < value
          tmpv = value
        EndIf
        If tmpv > DMXSlider(i)\max
          tmpv = DMXSlider(i)\max
        EndIf
        tmps = DMXSlider(i)\w + (DMXSlider(i)\w / 10)
        DMXSlider(i)\min    = value
        DMXSlider(i)\pas    = (DMXSlider(i)\max - DMXSlider(i)\min) / (DMXSlider(i)\h - tmps)
        DMXSlider(i)\state  = (-tmpv + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
        DMXSlider(i)\value  = tmpv + DMXSlider(i)\min
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
      Case #PB_ScrollBar_Maximum
        If value < DMXSlider(i)\min
          value = DMXSlider(i)\min
        EndIf
        tmpv = DMXSlider(i)\value
        If tmpv < DMXSlider(i)\min
          tmpv = DMXSlider(i)\min
        EndIf
        If tmpv > value
          tmpv = value
        EndIf
        tmps = DMXSlider(i)\w + (DMXSlider(i)\w / 10)
        DMXSlider(i)\max    = value
        DMXSlider(i)\pas    = (DMXSlider(i)\max - DMXSlider(i)\min) / (DMXSlider(i)\h - tmps)
        DMXSlider(i)\state  = (-tmpv + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
        DMXSlider(i)\value  = tmpv + DMXSlider(i)\min
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
    EndSelect
  EndIf

EndProcedure

Procedure.l GetDMXGadgetRegulatory(gadget.l, attribut.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)

  If i > #DMX_No_Select
    Select attribut
      Case #DMX_Regulatory_Off
        ProcedureReturn #DMX_Regulatory_Off
      Case #DMX_Regulatory_On
        ProcedureReturn #DMX_Regulatory_On
      Case #DMX_Regulatory_progress
        ProcedureReturn #DMX_Regulatory_progress
    EndSelect
  EndIf

EndProcedure

Procedure.l SetDMXGadgetRegulatory(gadget.l, attribut.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)

  If i > #DMX_No_Select
    Select attribut
      Case #DMX_Regulatory_Off
        DMXSlider(i)\regulatory = #DMX_Regulatory_Off
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
      Case #DMX_Regulatory_On
        DMXSlider(i)\regulatory = #DMX_Regulatory_On
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
      Case #DMX_Regulatory_progress
        DMXSlider(i)\regulatory = #DMX_Regulatory_progress
        SetDrawSlider_Regulatory(gadget)
        SetDrawSlider_FullDraw(gadget)
    EndSelect
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- ROUTINE DE TEST DU DMX SILDER.

Define i.l
Define j.l
Define k.l
Define l.l
Define event.l
Define evenp.l
Define eveng.l
Define dmxev.l

Define posNumbersSlider.l = 0
Define maxNumbersSlider.l = 512
Define maxVisibleSlider.l = 20

Global Dim tabNumbersSlider.l(maxNumbersSlider)

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
  SmartWindowRefresh(0, 1)

  ButtonGadget(0, 715, 10, 80, 40, "Disabled")
  ButtonGadget(1, 715, 55, 80, 40, "Hide")
  ContainerGadget(4, 10, 10, (maxVisibleSlider * 34) + maxVisibleSlider, 414, #PB_Container_Flat)
    For k=1 To maxVisibleSlider
      ImageGadget(800 + k, (10 + ((k - 1) * 34)), 10, 32, 32, 0, #PB_Image_Border)
      ImageGadget(850 + k, (10 + ((k - 1) * 34)), 44, 32, 32, 0, #PB_Image_Border)
      TextGadget(99 + k,  (10 + ((k - 1) * 34)), 79, 32, 20, Str(GetDMXGadgetState(0)), #PB_Text_Border | #PB_Text_Center)
      SetGadgetFont(99 + k, FontID(Font_DMXSlider_ID1))
      SetGadgetColor(99 + k, #PB_Gadget_FrontColor, $FFFFFF)
      SetGadgetColor(99 + k, #PB_Gadget_BackColor, $000000)
      TextGadget(199 + k,  (10 + ((k - 1) * 34)), 101, 32, 20, Str(k), #PB_Text_Border | #PB_Text_Center)
      SetGadgetFont(199 + k, FontID(Font_DMXSlider_ID1))
      SetGadgetColor(199 + k, #PB_Gadget_FrontColor, $000000)
      SetGadgetColor(199 + k, #PB_Gadget_BackColor, $FFFFFF)
      DMXGadget_Slider(k, (10 + ((k - 1) * 34)), 123, 32, 256, 0, 0, 255, #DMX_Color_Gray, $F0E0C0)
    Next k
    ScrollBarGadget(2, 10, 382, (maxVisibleSlider * 34) - 2, 20, 0, (maxNumbersSlider - maxVisibleSlider) + maxVisibleSlider, maxVisibleSlider)
  CloseGadgetList()
  SetGadgetColor(4, #PB_Gadget_LineColor, $FFFFFF)
  SetGadgetColor(4, #PB_Gadget_BackColor, $F0E0C0)

  j = 0
  Repeat
    event = WaitWindowEvent(20)
    evenp = EventType()
    eveng = EventGadget()
    
    dmxev = DMXGadget_EventType(event, evenp, eveng)
    Select dmxev
      Case #DMX_Multi_Select
        For k=1 To DMXGadget_CountMultiSelect()
          SetGadgetText(99 + DMXGadget_ValueMultiSelect(k), Str(GetDMXGadgetState(DMXGadget_ValueMultiSelect(k))))
          SetGadgetColor(99 + DMXGadget_ValueMultiSelect(k), #PB_Gadget_BackColor, RGB(0, 0, GetDMXGadgetState(DMXGadget_ValueMultiSelect(k))))
          tabNumbersSlider(posNumbersSlider +  DMXGadget_ValueMultiSelect(k)) = GetDMXGadgetState(DMXGadget_ValueMultiSelect(k))
        Next k
      Default
        If dmxev <> -1
          SetGadgetText (99 + dmxev, Str(GetDMXGadgetState(dmxev)))
          SetGadgetColor(99 + dmxev, #PB_Gadget_BackColor, RGB(0, 0, GetDMXGadgetState(dmxev)))
          tabNumbersSlider(posNumbersSlider + dmxev) = GetDMXGadgetState(dmxev)
        EndIf
    EndSelect
    
    If event = #PB_Event_Gadget
      If eveng = 0
        If i = 0
          i = 1
          SetGadgetText(0, "Enabled")
        Else
          i = 0
          SetGadgetText(0, "Disabled")
        EndIf
        For k=1 To maxVisibleSlider
          DisableDMXGadget(k, i)
        Next k
      EndIf
      If eveng = 1
        If j = 0
          j = 1
          SetGadgetText(1, "Show")
        Else
          j = 0
          SetGadgetText(1, "Hide")
        EndIf
        For k=1 To maxVisibleSlider
          HideDMXGadget(k, j)
        Next k
      EndIf
      If eveng = 2
        posNumbersSlider = GetGadgetState(2)
        For k=1 To maxVisibleSlider
          SetGadgetText (99 + k, Str(tabNumbersSlider(posNumbersSlider + k)))
          SetGadgetColor(99 + k, #PB_Gadget_BackColor, RGB(0, 0, tabNumbersSlider(posNumbersSlider + k)))
          SetGadgetText(199 + k, Str(posNumbersSlider + k))
          SetDMXGadgetState(k, tabNumbersSlider(posNumbersSlider + k))
        Next k
      EndIf
    EndIf
  Until event = #PB_Event_CloseWindow
EndIf
Cordialement,
GallyHC
Dernière modification par GallyHC le dim. 11/mars/2012 9:47, modifié 9 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: OpenWindow et molette de la souris

Message par nico »

Si t'as un code, je me penche dessus!
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour,

Pas de problème pour le code je parpage pas mal ce que je fait :) donc en fait c'est toujours et encore pour mon slider type potentiometre linaire :). Il y a encore des problèmes surtout sur le centrage du bouton mais je travail dessus.

Voila le code complet :)

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  color.l
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure
;}
;{ - CONSTANTES GLOBALS
Global numDMXSlider.l = 0
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global FontID1 = LoadFont(#PB_Any, "Century Gothic", 9, #PB_Font_HighQuality | #PB_Font_Bold)
;}
;{ - CONSTANTE
#DMXSlider_Color_01 = $8E6235
#DMXSlider_Color_02 = $E9D6C2
#DMXSlider_Color_03 = $D5B08C
#DMXSlider_Color_04 = $F9F3ED
#DMXSlider_Color_05 = $B88957
#DMXSlider_Color_06 = $DCBD9E
#DMXSlider_Color_07 = $E6D0B9
#DMXSlider_Color_08 = $E9D6C2
#DMX_Color_Default  = -1
#DMX_Color_White    = $FFFFFF
#DMX_Color_Gray     = $000000
#DMX_Color_Red      = $0000FF
#DMX_Color_Green    = $00FF00
#DMX_Color_Blue     = $FF0000
#DMX_Color_Cyan     = $FFFF00
#DMX_Color_Purple   = $FF00FF
#DMX_Color_Yellow   = $00FFFF
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l ColorSubstitute(color.l, finalcolor.l)
; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l

  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If     lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If      lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn (lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l SetFindDMXGadget(gadget.l)
; ROUTINE DE RECHERCHE DU GADGET DMX.
  Define i.l

  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn #False

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure SetDrawSlider_Regulatory(gadget.l)
; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > #False
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        If DMXSlider(i)\color = -1
          Couleur(0) = #DMXSlider_Color_01
          Couleur(1) = #DMXSlider_Color_02
          Couleur(2) = #DMXSlider_Color_03
          Couleur(3) = #DMXSlider_Color_04
          Couleur(4) = #DMXSlider_Color_05
          Couleur(5) = #DMXSlider_Color_06
          Couleur(6) = #DMXSlider_Color_07
          Couleur(7) = #DMXSlider_Color_08
        Else
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
        EndIf
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        Box(0, 0, w, h, Couleur(3))
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2),      Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc,  Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc,      Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc,  Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc,  Couleur(1))
        tmpb = DMXSlider(i)\max - DMXSlider(i)\min
        pasa = (h - (tmpc * 2)) / tmpb
        For i=0 To h - (tmpc * 2)
          LineXY(0, tmpc + i,   tmpa - 4, tmpc + i,       Couleur(2))
          LineXY(0, tmpc + i + 1, tmpa - 4, tmpc + i + 1, Couleur(7))
          LineXY(tmpa+4, tmpc + i,   w, tmpc + i,         Couleur(2))
          LineXY(tmpa+4, tmpc + i + 1, w, tmpc + i + 1,   Couleur(7))
          i + (pasa * 10)
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf
  
EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > #False
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\color = -1
          Couleur(0) = #DMXSlider_Color_01
          Couleur(1) = #DMXSlider_Color_02
          Couleur(2) = #DMXSlider_Color_03
          Couleur(3) = #DMXSlider_Color_04
          Couleur(4) = #DMXSlider_Color_05
          Couleur(5) = #DMXSlider_Color_06
          Couleur(6) = #DMXSlider_Color_07
          Couleur(7) = #DMXSlider_Color_08
        Else
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For i = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, i, w - 2, i, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - i, w - 2, (w + tmpa - 1) - i, RGB(mula, mulb, mulc))
        Next i
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        LineXY(1, ((w + tmpa) / 2),   w - 2, ((w + tmpa) / 2),   Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For i = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + i, w - 4, tmpb + 1 + i,   RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - i, w - 4, (w + tmpa) - tmpb - 2 - i, RGB(mula, mulb, mulc))
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure DMXSliderGadget_Draw(gadget.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
    If DMXSlider(i)\lImage_01 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
    EndIf
    StopDrawing()
  EndIf
    
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, state.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default)
;
; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf

  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If state > min
    state = min
  EndIf
  If state > max
    state = max
  EndIf
  tmps = w + (w / 10)

  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget = gadget
  DMXSlider(j)\x      = x
  DMXSlider(j)\y      = y
  DMXSlider(j)\w      = w
  DMXSlider(j)\h      = h
  DMXSlider(j)\pas    = (max - min) / (h - tmps)
  DMXSlider(j)\min    = min
  DMXSlider(j)\max    = max
  DMXSlider(j)\state  = (max - min) - (state + tmps)
  DMXSlider(j)\color  = color
  
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h)
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  DMXSliderGadget_Draw(DMXSlider(j)\gadget)

EndProcedure

Procedure DMXGadget_Event(event.l, evenp.l, eveng.l, mouwh.l)
;
  Protected i.l
  Protected lMosY.l

  For i=1 To numDMXSlider
    If event = #PB_Event_Gadget
      If eveng = DMXSlider(i)\lCanva_01
        If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
          lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY)
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
          Else
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)
        Else
          lMosY = DMXSlider(i)\state + mouwh
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)          
        EndIf
      EndIf
    EndIf
  Next i

EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define j.l = 1
Define event.l
Define evenp.l
Define eveng.l
Define mouwh.l

InitMouse()

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
   SmartWindowRefresh(0, 1)
   
   DMXSliderGadget(0, 10,  10, 44, 256, 0, 0, 255, #DMX_Color_Gray)
   DMXSliderGadget(1, 58,  10, 44, 256, 0, 0, 255, #DMX_Color_Red)
   DMXSliderGadget(2, 106, 10, 44, 256, 0, 0, 255, #DMX_Color_Green)
   DMXSliderGadget(3, 154, 10, 44, 256, 0, 0, 255, #DMX_Color_Blue)
   DMXSliderGadget(4, 250, 10, 44, 256, 0, 0, 255, #DMX_Color_Cyan)
   DMXSliderGadget(5, 298, 10, 44, 256, 0, 0, 255, #DMX_Color_Purple)
   DMXSliderGadget(6, 346, 10, 44, 256, 0, 0, 255, #DMX_Color_Yellow)
   DMXSliderGadget(7, 394, 10, 44, 256, 0, 0, 255, #DMX_Color_Default)

   Repeat
    event = WaitWindowEvent(20)
    evenp = EventType()
    eveng = EventGadget()
    
    
    DMXGadget_Event(event, evenp, eveng, mouwh)
   Until event = #PB_Event_CloseWindow
EndIf
tu peux aussi donné ton avis sur le résultat et le code si tu vois des trucs a modifier :)

merci d'avance,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: OpenWindow et molette de la souris

Message par nico »

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  color.l
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure

Structure MOUSEHOOKSTRUCTEX
  MOUSEHOOKSTRUCT.MOUSEHOOKSTRUCT
  mouseData.l
EndStructure 

;}
;{ - CONSTANTES GLOBALS
Global MouseWheelHook.i
Global numDMXSlider.l = 0
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global FontID1 = LoadFont(#PB_Any, "Century Gothic", 9, #PB_Font_HighQuality | #PB_Font_Bold)
;}
;{ - CONSTANTE
#WHEEL_DELTA = 120
#WM_PERSO = #WM_USER+200
#DMXSlider_Color_01 = $8E6235
#DMXSlider_Color_02 = $E9D6C2
#DMXSlider_Color_03 = $D5B08C
#DMXSlider_Color_04 = $F9F3ED
#DMXSlider_Color_05 = $B88957
#DMXSlider_Color_06 = $DCBD9E
#DMXSlider_Color_07 = $E6D0B9
#DMXSlider_Color_08 = $E9D6C2
#DMX_Color_Default  = -1
#DMX_Color_White    = $FFFFFF
#DMX_Color_Gray     = $000000
#DMX_Color_Red      = $0000FF
#DMX_Color_Green    = $00FF00
#DMX_Color_Blue     = $FF0000
#DMX_Color_Cyan     = $FFFF00
#DMX_Color_Purple   = $FF00FF
#DMX_Color_Yellow   = $00FFFF
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l ColorSubstitute(color.l, finalcolor.l)
  ; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l
  
  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If     lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If      lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn (lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l SetFindDMXGadget(gadget.l)
  ; ROUTINE DE RECHERCHE DU GADGET DMX.
  Define i.l
  
  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn #False
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure SetDrawSlider_Regulatory(gadget.l)
  ; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)
  
  If i > #False
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        If DMXSlider(i)\color = -1
          Couleur(0) = #DMXSlider_Color_01
          Couleur(1) = #DMXSlider_Color_02
          Couleur(2) = #DMXSlider_Color_03
          Couleur(3) = #DMXSlider_Color_04
          Couleur(4) = #DMXSlider_Color_05
          Couleur(5) = #DMXSlider_Color_06
          Couleur(6) = #DMXSlider_Color_07
          Couleur(7) = #DMXSlider_Color_08
        Else
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
        EndIf
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        Box(0, 0, w, h, Couleur(3))
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2),      Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc,  Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc,      Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc,  Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc,  Couleur(1))
        tmpb = DMXSlider(i)\max - DMXSlider(i)\min
        pasa = (h - (tmpc * 2)) / tmpb
        For i=0 To h - (tmpc * 2)
          LineXY(0, tmpc + i,   tmpa - 4, tmpc + i,       Couleur(2))
          LineXY(0, tmpc + i + 1, tmpa - 4, tmpc + i + 1, Couleur(7))
          LineXY(tmpa+4, tmpc + i,   w, tmpc + i,         Couleur(2))
          LineXY(tmpa+4, tmpc + i + 1, w, tmpc + i + 1,   Couleur(7))
          i + (pasa * 10)
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf
  
EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
  ; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)
  
  If i > #False
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\color = -1
          Couleur(0) = #DMXSlider_Color_01
          Couleur(1) = #DMXSlider_Color_02
          Couleur(2) = #DMXSlider_Color_03
          Couleur(3) = #DMXSlider_Color_04
          Couleur(4) = #DMXSlider_Color_05
          Couleur(5) = #DMXSlider_Color_06
          Couleur(6) = #DMXSlider_Color_07
          Couleur(7) = #DMXSlider_Color_08
        Else
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For i = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, i, w - 2, i, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - i, w - 2, (w + tmpa - 1) - i, RGB(mula, mulb, mulc))
        Next i
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        LineXY(1, ((w + tmpa) / 2),   w - 2, ((w + tmpa) / 2),   Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For i = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + i, w - 4, tmpb + 1 + i,   RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - i, w - 4, (w + tmpa) - tmpb - 2 - i, RGB(mula, mulb, mulc))
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf
  
EndProcedure

Procedure DMXSliderGadget_Draw(gadget.l)
  ;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
    If DMXSlider(i)\lImage_01 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
    EndIf
    StopDrawing()
  EndIf
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
  
Procedure MouseProc(nCode.l, wParam.i, lParam.i)
  Protected *pointeur.MOUSEHOOKSTRUCTEX
  *pointeur=lParam
  
  If nCode=#HC_ACTION
    If wParam=#WM_MOUSEWHEEL
      Debug "#WM_MOUSEWHEEL"
      PostMessage_(WindowID(0), #WM_PERSO, *pointeur\mousedata, GetActiveGadget())
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(MouseWheelHook, nCode, wParam, lParam)
EndProcedure

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, state.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default)
  ;
  ; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf
  
  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If state > min
    state = min
  EndIf
  If state > max
    state = max
  EndIf
  tmps = w + (w / 10)
  
  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget = gadget
  DMXSlider(j)\x      = x
  DMXSlider(j)\y      = y
  DMXSlider(j)\w      = w
  DMXSlider(j)\h      = h
  DMXSlider(j)\pas    = (max - min) / (h - tmps)
  DMXSlider(j)\min    = min
  DMXSlider(j)\max    = max
  DMXSlider(j)\state  = (max - min) - (state + tmps)
  DMXSlider(j)\color  = color
  
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard)
  
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  DMXSliderGadget_Draw(DMXSlider(j)\gadget)
  
EndProcedure

Procedure DMXGadget_Event(event.l, evenp.l, eveng.l, mouwh.l)
  ;
  Protected i.l
  Protected lMosY.l
  
  For i=1 To numDMXSlider
    If event = #PB_Event_Gadget
      If eveng = DMXSlider(i)\lCanva_01
        If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
          lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY)
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
          Else
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          Debug DMXSlider(i)\state
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)
        Else
          lMosY = DMXSlider(i)\state + mouwh
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)          
        EndIf
      EndIf
    EndIf
  Next i
  
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define j.l = 1
Define event.l
Define evenp.l
Define eveng.l
Define mouwh.l
Define.l Molette

InitMouse()

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
  
  MouseWheelHook = SetWindowsHookEx_(#WH_MOUSE, @MouseProc(), GetModuleHandle_(0), GetWindowThreadProcessId_(WindowID(0),0))
  
  SmartWindowRefresh(0, 1)
  
  DMXSliderGadget(0, 10,  10, 44, 256, 0, 0, 255, #DMX_Color_Gray)
  DMXSliderGadget(1, 58,  10, 44, 256, 0, 0, 255, #DMX_Color_Red)
  DMXSliderGadget(2, 106, 10, 44, 256, 0, 0, 255, #DMX_Color_Green)
  DMXSliderGadget(3, 154, 10, 44, 256, 0, 0, 255, #DMX_Color_Blue)
  DMXSliderGadget(4, 250, 10, 44, 256, 0, 0, 255, #DMX_Color_Cyan)
  DMXSliderGadget(5, 298, 10, 44, 256, 0, 0, 255, #DMX_Color_Purple)
  DMXSliderGadget(6, 346, 10, 44, 256, 0, 0, 255, #DMX_Color_Yellow)
  DMXSliderGadget(7, 394, 10, 44, 256, 0, 0, 255, #DMX_Color_Default)
  
  Repeat
    event = WaitWindowEvent()
    evenp = EventType()
    eveng = EventGadget()
    
    Debug event 
    Select event
      Case #WM_PERSO
        Molette = -(EventwParam() >> 16) / #WHEEL_DELTA
        DMXGadget_Event(#PB_Event_Gadget, evenp, EventlParam(), Molette)
        
      Default
        ;PostMessage_(WindowID(0), #WM_PERSO, 0, 0)
        DMXGadget_Event(event, evenp, eveng, mouwh)
    EndSelect 
    
  Until event = #PB_Event_CloseWindow
  UnhookWindowsHookEx_(MouseWheelHook)
EndIf
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: OpenWindow et molette de la souris

Message par graph100 »

Tiens :
Dans la procédure "DMXSliderGadget()" remplace la ligne de création du gadget avec celle qui suit :

Code : Tout sélectionner

  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard)
elle active le focus du clavier sur le gadget, et permet d'avoir les mousewheel Delta facilement avec les évènements gadgets

Code : Tout sélectionner

Procedure DMXGadget_Event(event.l, evenp.l, eveng.l, mouwh.l)
;
  Protected i.l
  Protected lMosY.l

  For i=1 To numDMXSlider
    If event = #PB_Event_Gadget
      If eveng = DMXSlider(i)\lCanva_01
      	
      	; ######################
      	; # MODIFICATION       #
      	; ######################
      	
      	If evenp = #PB_EventType_MouseWheel
      		DMXSlider(i)\value = DMXSlider(i)\value + GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\pas
      		
      		If DMXSlider(i)\value < DMXSlider(i)\min
            DMXSlider(i)\value = DMXSlider(i)\min
          ElseIf DMXSlider(i)\value > DMXSlider(i)\max
            DMXSlider(i)\value = DMXSlider(i)\max
          EndIf
          
          DMXSlider(i)\state = (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
          
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)
        ElseIf evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
        	
      	; ######################
      	; # /MODIFICATION      #
      	; ######################
      	
        	lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY)
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
          Else
            DMXSlider(i)\value = (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)
          
          Debug DMXSlider(i)\state
        Else
          lMosY = DMXSlider(i)\state + mouwh
          If lMosY < 0
            lMosY = 0
          EndIf
          If lMosY > DMXSlider(i)\h - (DMXSlider(i)\hb - 1)
            lMosY = DMXSlider(i)\h - DMXSlider(i)\hb - 1
          EndIf
          DMXSlider(i)\state = lMosY
          DMXSliderGadget_Draw(DMXSlider(i)\gadget)         
        EndIf
      EndIf
    EndIf
  Next i

EndProcedure
Comme tu utilises un canvasgadget la molette est gérée directement avec le gadget.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour,

Un grand merci a vous deux, avec tout cela si j'arrive rien c'est que je suis une ..... lollllllll

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: OpenWindow et molette de la souris

Message par nico »

Tout était dans la doc, je me suis emmerdé pour rien, oublie mon code!

Je n'ai encore jamais utilisé c e gadget mais il a l'air vraiment prometteur.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour,

nico> je n'ai pas non plus l'habitude de ce gadget et surout j'avais fait des test mais rien ne fonctionne :). Je suis parti sur le code de graph100, mais tout de même merci :)

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
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: OpenWindow et molette de la souris

Message par graph100 »

arf, comme le message de Gally avec son code étais super long, j'ai pas vu que nico avait répondu ^^
mais bon, on a pas couvert les mêmes solutions.

Celle de nico est utile pour gérer la molette en dehors des gadgets (quand on fait des trucs un peu compliqué), c'est à garder dans un coin !
Mais le canvasgadget est génial en ce qu'il permet l'utilisation native du clavier et des paramètres souris qu'on n'avais pas avant !

encore merci Fred et l'équipe ;)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour tous,

Donc voici le debut plus fontionnel :) il manque certaine chose du style changement des couleur ect... mais je l'ajouterais par la suite.

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  color.l
  disable.b
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure
;}
;{ - CONSTANTES GLOBALS
Global numDMXSlider.l = 0
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global FontID1 = LoadFont(#PB_Any, "Century Gothic", 9, #PB_Font_HighQuality | #PB_Font_Bold)
;}
;{ - CONSTANTE
#DMXSlider_Color_01 = $8E6235
#DMXSlider_Color_02 = $E9D6C2
#DMXSlider_Color_03 = $D5B08C
#DMXSlider_Color_04 = $F9F3ED
#DMXSlider_Color_05 = $B88957
#DMXSlider_Color_06 = $DCBD9E
#DMXSlider_Color_07 = $E6D0B9
#DMXSlider_Color_08 = $E9D6C2
#DMX_Color_Default  = -1
#DMX_Color_White    = $FFFFFF
#DMX_Color_Gray     = $000000
#DMX_Color_Red      = $0000FF
#DMX_Color_Green    = $00FF00
#DMX_Color_Blue     = $FF0000
#DMX_Color_Cyan     = $FFFF00
#DMX_Color_Purple   = $FF00FF
#DMX_Color_Yellow   = $00FFFF
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l ColorSubstitute(color.l, finalcolor.l)
; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l

  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If     lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If      lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn (lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l SetFindDMXGadget(gadget.l)
; ROUTINE DE RECHERCHE DU GADGET DMX.
  Define i.l

  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn -1

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure SetDrawSlider_Regulatory(gadget.l)
; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, $000000)
        Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, $000000)
        Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, $000000)
        Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, $000000)
        Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, $000000)
        Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, $000000)
        Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, $000000)
        Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, $000000)
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        Box(0, 0, w, h, Couleur(3))
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2),      Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc,  Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc,      Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc,  Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc,  Couleur(1))
        tmpb = DMXSlider(i)\max - DMXSlider(i)\min
        pasa = (h - (tmpc * 2)) / tmpb
        For i=0 To h - (tmpc * 2)
          LineXY(0, tmpc + i,   tmpa - 4, tmpc + i,       Couleur(2))
          LineXY(0, tmpc + i + 1, tmpa - 4, tmpc + i + 1, Couleur(7))
          LineXY(tmpa+4, tmpc + i,   w, tmpc + i,         Couleur(2))
          LineXY(tmpa+4, tmpc + i + 1, w, tmpc + i + 1,   Couleur(7))
          i + (pasa * 10)
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\disable = 1
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, #DMX_Color_White)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, #DMX_Color_White)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, #DMX_Color_White)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, #DMX_Color_White)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, #DMX_Color_White)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, #DMX_Color_White)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, #DMX_Color_White)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, #DMX_Color_White)
        Else
          If DMXSlider(i)\color = -1
            Couleur(0) = #DMXSlider_Color_01
            Couleur(1) = #DMXSlider_Color_02
            Couleur(2) = #DMXSlider_Color_03
            Couleur(3) = #DMXSlider_Color_04
            Couleur(4) = #DMXSlider_Color_05
            Couleur(5) = #DMXSlider_Color_06
            Couleur(6) = #DMXSlider_Color_07
            Couleur(7) = #DMXSlider_Color_08
          Else
            Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
            Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
            Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
            Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
            Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
            Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
            Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
            Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
          EndIf
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For i = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, i, w - 2, i, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - i, w - 2, (w + tmpa - 1) - i, RGB(mula, mulb, mulc))
        Next i
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        LineXY(1, ((w + tmpa) / 2),   w - 2, ((w + tmpa) / 2),   Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For i = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + i, w - 4, tmpb + 1 + i,   RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - i, w - 4, (w + tmpa) - tmpb - 2 - i, RGB(mula, mulb, mulc))
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure DMXSliderGadget_Draw(gadget.l)
; ROUTINE DE TRACAGE DU DMX SILDER COMPLET.
  Protected i.l   = SetFindDMXGadget(gadget)

  If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
    If DMXSlider(i)\lImage_01 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      DrawImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
    EndIf
    StopDrawing()
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, value.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default)
;
; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf

  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If value < 0
    value = 0
  EndIf
  If value > max
    value = max
  EndIf
  tmps = w + (w / 10)

  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget   = gadget
  DMXSlider(j)\x        = x
  DMXSlider(j)\y        = y
  DMXSlider(j)\w        = w
  DMXSlider(j)\h        = h
  DMXSlider(j)\pas      = (max - min) / (h - tmps)
  DMXSlider(j)\min      = min
  DMXSlider(j)\max      = max
  DMXSlider(j)\value    = value
  DMXSlider(j)\state    = (-DMXSlider(j)\value + (DMXSlider(j)\max - DMXSlider(j)\min)) / DMXSlider(j)\pas
  DMXSlider(j)\color    = color
  DMXSlider(j)\disable  = 0
  
  Debug DMXSlider(j)\pas
  ;Debug (h - tmps)
  ;Debug (value * DMXSlider(j)\pas)
  
  ;
  ; ROUTINE DE TACAGE DU DMX SLIDER GADGET.
  ;
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard)
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  DMXSliderGadget_Draw(DMXSlider(j)\gadget)

EndProcedure

Procedure DMXGadget_Event(event.l, evenp.l, eveng.l, mouwh.l)
;
  Protected i.l
  Protected lMosY.l

  If event = #PB_Event_Gadget
    For i=1 To numDMXSlider
      If eveng = DMXSlider(i)\lCanva_01
        If DMXSlider(i)\disable = 0
          If evenp = #PB_EventType_MouseWheel
            DMXSlider(i)\value = DMXSlider(i)\value + GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\pas
            If DMXSlider(i)\value < DMXSlider(i)\min
              DMXSlider(i)\value = DMXSlider(i)\min
            ElseIf DMXSlider(i)\value > DMXSlider(i)\max
              DMXSlider(i)\value = DMXSlider(i)\max
            EndIf          
            DMXSlider(i)\state = DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            Debug DMXSlider(i)\value
          EndIf
          If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY) - (DMXSlider(i)\hb / 2)
            If lMosY < 0
              lMosY = 0
            EndIf
            If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
            Else
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
            EndIf
            If lMosY > (DMXSlider(i)\h - (DMXSlider(i)\hb))
              lMosY = DMXSlider(i)\h - DMXSlider(i)\hb
            EndIf
            DMXSlider(i)\state = lMosY
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            Debug DMXSlider(i)\value
          EndIf
        EndIf
      EndIf
    Next i
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DisableDMXGadget(gadget.l, etat.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    If DMXSlider(i)\disable <> etat
      DMXSlider(i)\disable = etat
      SetDrawSlider_Button(gadget)
      SetDrawSlider_Regulatory(gadget)
      DMXSliderGadget_Draw(gadget)
    EndIf
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define j.l = 1
Define event.l
Define evenp.l
Define eveng.l
Define mouwh.l

InitMouse()

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
   SmartWindowRefresh(0, 1)
   DMXSliderGadget(0, 10,  10, 44, 256, 0, 10, 285, #DMX_Color_Gray)
   DMXSliderGadget(1, 58,  10, 44, 256, 0, 11, 255, #DMX_Color_Red)
   DMXSliderGadget(2, 106, 10, 44, 256, 0, 0, 255, #DMX_Color_Green)
   DMXSliderGadget(3, 154, 10, 44, 256, 0, 0, 255, #DMX_Color_Blue)
   DMXSliderGadget(4, 250, 10, 44, 256, 0, 0, 255, #DMX_Color_Cyan)
   DMXSliderGadget(5, 298, 10, 44, 256, 0, 0, 255, #DMX_Color_Purple)
   DMXSliderGadget(6, 346, 10, 44, 256, 0, 0, 255, #DMX_Color_Yellow)
   DMXSliderGadget(7, 394, 10, 88, 512, 127, 0, 255, #DMX_Color_Default)
   ButtonGadget(0, 10, 270, 44, 20, "Disabled")
   
   Repeat
    event = WaitWindowEvent(20)
    evenp = EventType()
    eveng = EventGadget()
    
    DMXGadget_Event(event, evenp, eveng, mouwh)
    
    If event = #PB_Event_Gadget
      If eveng = 0
        If i = 0
          i = 1
        Else
          i = 0
        EndIf
        DisableDMXGadget(0, i)
        DisableDMXGadget(1, i)
        DisableDMXGadget(2, i)
        DisableDMXGadget(3, i)
        DisableDMXGadget(4, i)
        DisableDMXGadget(5, i)
        DisableDMXGadget(6, i)
        DisableDMXGadget(7, i)
      EndIf
    EndIf
    
  Until event = #PB_Event_CloseWindow
EndIf
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
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: OpenWindow et molette de la souris

Message par Ar-S »

ça commence à être bien beau.
tu devrais ajouter une option sous les slider permettant de modifier au choix le nombre de "pas" lorsqu'on utilise la molette.
Que si on le désire, en un tour de molette par exemple, le slider puisse se retrouver tout en haut. (un ComboBoxGadget avec un x2 x4 x8 x16 ?)
Sinon pense aussi à modifier ton 'disable' en 'enable' lorsque qu'on les désactive et vice versa ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour tous

Voila Ar-S :)

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  WheelZoom.l
  color.l
  disable.b
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure
;}
;{ - CONSTANTES GLOBALS
Global numDMXSlider.l = 0
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global FontID1 = LoadFont(#PB_Any, "Century Gothic", 9, #PB_Font_HighQuality | #PB_Font_Bold)
;}
;{ - CONSTANTE
#DMXSlider_Color_01 = $8E6235
#DMXSlider_Color_02 = $E9D6C2
#DMXSlider_Color_03 = $D5B08C
#DMXSlider_Color_04 = $F9F3ED
#DMXSlider_Color_05 = $B88957
#DMXSlider_Color_06 = $DCBD9E
#DMXSlider_Color_07 = $E6D0B9
#DMXSlider_Color_08 = $E9D6C2
#DMX_Color_Default  = -1
#DMX_Color_White    = $FFFFFF
#DMX_Color_Gray     = $000000
#DMX_Color_Red      = $0000FF
#DMX_Color_Green    = $00FF00
#DMX_Color_Blue     = $FF0000
#DMX_Color_Cyan     = $FFFF00
#DMX_Color_Purple   = $FF00FF
#DMX_Color_Yellow   = $00FFFF
#DMX_Zoom_x1        = 1
#DMX_Zoom_x2        = 2
#DMX_Zoom_x4        = 4
#DMX_Zoom_x8        = 8
#DMX_Zoom_x16       = 16
#DMX_Zoom_x32       = 32
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l ColorSubstitute(color.l, finalcolor.l)
; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l

  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If     lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If      lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn (lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l SetFindDMXGadget(gadget.l)
; ROUTINE DE RECHERCHE DU GADGET DMX.
  Define i.l

  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn -1

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure SetDrawSlider_Regulatory(gadget.l)
; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, $000000)
        Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, $000000)
        Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, $000000)
        Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, $000000)
        Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, $000000)
        Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, $000000)
        Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, $000000)
        Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, $000000)
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        Box(0, 0, w, h, Couleur(3))
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2),      Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc,  Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc,      Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc,  Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc,  Couleur(1))
        tmpb = DMXSlider(i)\max - DMXSlider(i)\min
        pasa = (h - (tmpc * 2)) / tmpb
        For i=0 To h - (tmpc * 2)
          LineXY(0, tmpc + i,   tmpa - 4, tmpc + i,       Couleur(2))
          LineXY(0, tmpc + i + 1, tmpa - 4, tmpc + i + 1, Couleur(7))
          LineXY(tmpa+4, tmpc + i,   w, tmpc + i,         Couleur(2))
          LineXY(tmpa+4, tmpc + i + 1, w, tmpc + i + 1,   Couleur(7))
          i + (pasa * 10)
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\disable = 1
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, #DMX_Color_White)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, #DMX_Color_White)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, #DMX_Color_White)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, #DMX_Color_White)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, #DMX_Color_White)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, #DMX_Color_White)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, #DMX_Color_White)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, #DMX_Color_White)
        Else
          If DMXSlider(i)\color = -1
            Couleur(0) = #DMXSlider_Color_01
            Couleur(1) = #DMXSlider_Color_02
            Couleur(2) = #DMXSlider_Color_03
            Couleur(3) = #DMXSlider_Color_04
            Couleur(4) = #DMXSlider_Color_05
            Couleur(5) = #DMXSlider_Color_06
            Couleur(6) = #DMXSlider_Color_07
            Couleur(7) = #DMXSlider_Color_08
          Else
            Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
            Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
            Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
            Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
            Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
            Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
            Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
            Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
          EndIf
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For i = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, i, w - 2, i, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - i, w - 2, (w + tmpa - 1) - i, RGB(mula, mulb, mulc))
        Next i
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        LineXY(1, ((w + tmpa) / 2),   w - 2, ((w + tmpa) / 2),   Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For i = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + i, w - 4, tmpb + 1 + i,   RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - i, w - 4, (w + tmpa) - tmpb - 2 - i, RGB(mula, mulb, mulc))
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure DMXSliderGadget_Draw(gadget.l)
; ROUTINE DE TRACAGE DU DMX SILDER COMPLET.
  Protected i.l   = SetFindDMXGadget(gadget)

  If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
    If DMXSlider(i)\lImage_01 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      DrawImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
    EndIf
    StopDrawing()
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, value.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default)
;
; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf

  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If value < 0
    value = 0
  EndIf
  If value > max
    value = max
  EndIf
  tmps = w + (w / 10)

  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget     = gadget
  DMXSlider(j)\x          = x
  DMXSlider(j)\y          = y
  DMXSlider(j)\w          = w
  DMXSlider(j)\h          = h
  DMXSlider(j)\pas        = (max - min) / (h - tmps)
  DMXSlider(j)\min        = min
  DMXSlider(j)\max        = max
  DMXSlider(j)\value      = value
  DMXSlider(j)\WheelZoom  = #DMX_Zoom_x1
  DMXSlider(j)\state      = (-DMXSlider(j)\value + (DMXSlider(j)\max - DMXSlider(j)\min)) / DMXSlider(j)\pas
  DMXSlider(j)\color      = color
  DMXSlider(j)\disable    = 0
  
  Debug DMXSlider(j)\pas
  ;Debug (h - tmps)
  ;Debug (value * DMXSlider(j)\pas)
  
  ;
  ; ROUTINE DE TACAGE DU DMX SLIDER GADGET.
  ;
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard)
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  DMXSliderGadget_Draw(DMXSlider(j)\gadget)

EndProcedure

Procedure DMXGadget_Event(event.l, evenp.l, eveng.l, mouwh.l)
;
  Protected i.l
  Protected lMosY.l

  If event = #PB_Event_Gadget
    For i=1 To numDMXSlider
      If eveng = DMXSlider(i)\lCanva_01
        If DMXSlider(i)\disable = 0
          If evenp = #PB_EventType_MouseWheel
            DMXSlider(i)\value = DMXSlider(i)\value + ((GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\pas) * DMXSlider(i)\WheelZoom)
            If DMXSlider(i)\value < DMXSlider(i)\min
              DMXSlider(i)\value = DMXSlider(i)\min
            ElseIf DMXSlider(i)\value > DMXSlider(i)\max
              DMXSlider(i)\value = DMXSlider(i)\max
            EndIf          
            DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas) - (DMXSlider(i)\WheelZoom / 16)
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            Debug DMXSlider(i)\value
          EndIf
          If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY) - (DMXSlider(i)\hb / 2)
            If lMosY < 0
              lMosY = 0
            EndIf
            If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
            Else
              DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
            EndIf
            If lMosY > (DMXSlider(i)\h - (DMXSlider(i)\hb))
              lMosY = DMXSlider(i)\h - DMXSlider(i)\hb
            EndIf
            DMXSlider(i)\state = lMosY
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            Debug DMXSlider(i)\value
          EndIf
        EndIf
      EndIf
    Next i
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure WheelZoomDMXGadget(gadget.l, zoom.l = 0)
;
  Protected i.l   = SetFindDMXGadget(gadget)

  Select zoom
    Case 0
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
    Case 1
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x2
    Case 2
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x4
    Case 3
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x8
    Case 4
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x16
    Case 5
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x32
    Default
      DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
  EndSelect
  
EndProcedure

Procedure DisableDMXGadget(gadget.l, etat.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    If DMXSlider(i)\disable <> etat
      DMXSlider(i)\disable = etat
      SetDrawSlider_Button(gadget)
      SetDrawSlider_Regulatory(gadget)
      DMXSliderGadget_Draw(gadget)
    EndIf
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define j.l = 1
Define event.l
Define evenp.l
Define eveng.l
Define mouwh.l

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
   SmartWindowRefresh(0, 1)
   DMXSliderGadget(0, 10,  10, 44, 256, 0, 10, 285, #DMX_Color_Gray)
   DMXSliderGadget(1, 58,  10, 44, 256, 0, 11, 255, #DMX_Color_Red)
   DMXSliderGadget(2, 106, 10, 44, 256, 0, 0, 255, #DMX_Color_Green)
   DMXSliderGadget(3, 154, 10, 44, 256, 0, 0, 255, #DMX_Color_Blue)
   DMXSliderGadget(4, 250, 10, 44, 256, 0, 0, 255, #DMX_Color_Cyan)
   DMXSliderGadget(5, 298, 10, 44, 256, 0, 0, 255, #DMX_Color_Purple)
   DMXSliderGadget(6, 346, 10, 44, 256, 0, 0, 255, #DMX_Color_Yellow)
   DMXSliderGadget(7, 394, 10, 88, 512, 127, 0, 255, #DMX_Color_Default)
   
   WheelZoomDMXGadget(0, 5)
   WheelZoomDMXGadget(7, 3)
   
   ButtonGadget(0, 10, 270, 44, 20, "Disabled")
   Repeat
    event = WaitWindowEvent(20)
    evenp = EventType()
    eveng = EventGadget()
    
    DMXGadget_Event(event, evenp, eveng, mouwh)
    
    If event = #PB_Event_Gadget
      If eveng = 0
        If i = 0
          i = 1
          SetGadgetText(0, "enabled")
        Else
          i = 0
          SetGadgetText(0, "Disabled")
        EndIf
        DisableDMXGadget(0, i)
        DisableDMXGadget(1, i)
        DisableDMXGadget(2, i)
        DisableDMXGadget(3, i)
        DisableDMXGadget(4, i)
        DisableDMXGadget(5, i)
        DisableDMXGadget(6, i)
        DisableDMXGadget(7, i)
      EndIf
    EndIf
    
  Until event = #PB_Event_CloseWindow
EndIf
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
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: OpenWindow et molette de la souris

Message par Ar-S »

GallyHC a écrit :Bonjour tous

Voila Ar-S :)
Tu as lu tout mon paragraphe ou tu as sauté une ligne ? :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

J'ai juste pas mis le combogadget mais le zoom de pas lol
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: OpenWindow et molette de la souris

Message par GallyHC »

Bonjour,

Version avec une correction et plus avancer et plus gerable aussi :)

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- INITIALISATION DES DIRECTIVES COMPILEUR.

DisableASM
EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

;{ - STRUCTURE
Structure DMXSlider
  gadget.l
  x.l
  y.l
  w.l
  h.l
  hb.l
  pas.d
  min.l
  max.l
  state.l
  value.l
  WheelZoom.l
  color.l
  disable.b
  lImage_01.l
  lImage_02.l
  lCanva_01.l
EndStructure
;}
;{ - CONSTANTES GLOBALS
Global numDMXSlider.l = 0
Global Dim DMXSlider.DMXSlider(numDMXSlider)
Global FontID1 = LoadFont(#PB_Any, "Century Gothic", 9, #PB_Font_HighQuality | #PB_Font_Bold)
;}
;{ - CONSTANTE
#DMXSlider_Color_01 = $8E6235
#DMXSlider_Color_02 = $E9D6C2
#DMXSlider_Color_03 = $D5B08C
#DMXSlider_Color_04 = $F9F3ED
#DMXSlider_Color_05 = $B88957
#DMXSlider_Color_06 = $DCBD9E
#DMXSlider_Color_07 = $E6D0B9
#DMXSlider_Color_08 = $E9D6C2
#DMX_Color_Default  = -1
#DMX_Color_White    = $FFFFFF
#DMX_Color_Gray     = $000000
#DMX_Color_Red      = $0000FF
#DMX_Color_Green    = $00FF00
#DMX_Color_Blue     = $FF0000
#DMX_Color_Cyan     = $FFFF00
#DMX_Color_Purple   = $FF00FF
#DMX_Color_Yellow   = $00FFFF
#DMX_Zoom_x1        = 1
#DMX_Zoom_x2        = 2
#DMX_Zoom_x4        = 4
#DMX_Zoom_x8        = 8
#DMX_Zoom_x16       = 16
#DMX_Zoom_x32       = 32
;}

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l ColorSubstitute(color.l, finalcolor.l)
; ROUTINE DE CHANGEMENT DES TEINTES DE COULEUR  
  Protected lTempsA.f
  Protected lTempsB.f
  Protected lColorR.l
  Protected lColorG.l
  Protected lColorB.l
  Protected lColorA.l
  Protected lShadeB.l
  Protected lShadeN.l

  lColorR = Red(color)
  lColorG = Green(color)
  lColorB = Blue(color)
  lColorA = Alpha(color)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lShadeN = 255 - lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lShadeN = 255 - lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lShadeN = 255 - lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  Else
    lShadeN = 255
    lColorB = 255
    lColorG = 255
    lColorR = 255
  EndIf
  If     lColorB < lColorG And lColorB < lColorR
    lShadeB = 255 - lColorB
  ElseIf lColorG < lColorB And lColorG < lColorR
    lShadeB = 255 - lColorG
  ElseIf lColorR < lColorB And lColorR < lColorG
    lShadeB = 255 - lColorR
  Else
    lShadeB = 255
  EndIf  
  lColorR = Red(finalcolor)
  lColorG = Green(finalcolor)
  lColorB = Blue(finalcolor)
  If     lColorB >= lColorG And lColorB >= lColorR And lColorB > 0
    lTempsA = 255 / lColorB
    lColorB = 255
    lColorG = lTempsA * lColorG
    lColorR = lTempsA * lColorR
  ElseIf lColorG >= lColorB And lColorG >= lColorR And lColorG > 0
    lTempsA = 255 / lColorG
    lColorB = lTempsA * lColorB
    lColorG = 255
    lColorR = lTempsA * lColorR
  ElseIf lColorR >= lColorG And lColorR >= lColorB And lColorR > 0
    lTempsA = 255 / lColorR
    lColorB = lTempsA * lColorB
    lColorG = lTempsA * lColorG
    lColorR = 255
  EndIf
  If      lColorB < lColorG And lColorB < lColorR
    lTempsA = 1 - lColorB / 255
    lColorG = (lColorG - lColorB) / lTempsA
    lColorR = (lColorR - lColorB) / lTempsA
    lColorB = 0
  ElseIf lColorG < lColorB And lColorG < lColorR
    lTempsA = 1 - lColorG / 255
    lColorB = (lColorB - lColorG) / lTempsA
    lColorR = (lColorR - lColorG) / lTempsA
    lColorG = 0
  ElseIf lColorR < lColorB And lColorR < lColorG
    lTempsA = 1 - lColorR / 255
    lColorB = (lColorB - lColorR) / lTempsA
    lColorG = (lColorG - lColorR) / lTempsA
    lColorR = 0
  EndIf
  lTempsA = 1 - lShadeB / 255
  lTempsB = (255 - lShadeN) / 255
  lColorR = (lColorR + (255 - lColorR) * lTempsA) * lTempsB
  If lColorR < 0
    lColorR = 0
  ElseIf lColorR > 255
    lColorR = 255
  EndIf
  lColorG = (lColorG + (255 - lColorG) * lTempsA) * lTempsB
  If lColorG < 0
    lColorG = 0
  ElseIf lColorG > 255
    lColorG = 255
  EndIf
  lColorB = (lColorB + (255 - lColorB) * lTempsA) * lTempsB
  If lColorB < 0
    lColorB = 0
  ElseIf lColorB > 255
    lColorB = 255
  EndIf
  ProcedureReturn (lColorR | lColorG << 8 | lColorB << 16 | lColorA << 24)
  
EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l SetFindDMXGadget(gadget.l)
; ROUTINE DE RECHERCHE DU GADGET DMX.
  Define i.l

  If numDMXSlider > 0
    For i=1 To numDMXSlider
      If DMXSlider(i)\gadget = gadget
        ProcedureReturn i
      EndIf
    Next i
  EndIf
  ProcedureReturn -1

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure SetDrawSlider_Regulatory(gadget.l)
; ROUTINE DE TRACAGE DE LA REGLE DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected h.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected state.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_01 <> 0
      FreeImage(DMXSlider(i)\lImage_01)
    EndIf
    DMXSlider(i)\lImage_01 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\h)
    If DMXSlider(i)\lImage_01 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_01))
        Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, $000000)
        Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, $000000)
        Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, $000000)
        Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, $000000)
        Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, $000000)
        Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, $000000)
        Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, $000000)
        Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, $000000)
        w = DMXSlider(i)\w
        h = DMXSlider(i)\h
        tmpa = w / 2
        tmpc = ((w + (w / 10)) / 2) - 1
        Box(0, 0, w, h, Couleur(3))
        Box(tmpa - 2, tmpc, 4, h - (tmpc * 2),      Couleur(2))
        LineXY(tmpa - 2, tmpc, tmpa - 2, h - tmpc,  Couleur(0))
        LineXY(tmpa - 2, tmpc, tmpa + 1, tmpc,      Couleur(0))
        LineXY(tmpa + 2, tmpc, tmpa + 2, h - tmpc,  Couleur(1))
        LineXY(tmpa - 1, h - tmpc, tmpa+2, h-tmpc,  Couleur(1))
        tmpb = DMXSlider(i)\max - DMXSlider(i)\min
        pasa = (h - (tmpc * 2)) / tmpb
        For i=0 To h - (tmpc * 2)
          LineXY(0, tmpc + i,   tmpa - 4, tmpc + i,       Couleur(2))
          LineXY(0, tmpc + i + 1, tmpa - 4, tmpc + i + 1, Couleur(7))
          LineXY(tmpa+4, tmpc + i,   w, tmpc + i,         Couleur(2))
          LineXY(tmpa+4, tmpc + i + 1, w, tmpc + i + 1,   Couleur(7))
          i + (pasa * 10)
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure SetDrawSlider_Button(gadget.l)
; ROUTINE DE TRACAGE DU BOUTON DU SLIDER.
  Protected i.l   = SetFindDMXGadget(gadget)
  Protected w.l
  Protected tmpa.l
  Protected tmpb.l
  Protected tmpc.l
  Protected pasa.f
  Protected pasb.f
  Protected pasc.f
  Protected mula.f
  Protected mulb.f
  Protected mulc.f
  Protected Dim Couleur(7)

  If i > -1
    If DMXSlider(i)\lImage_02 <> 0
      FreeImage(DMXSlider(i)\lImage_02)
    EndIf
    w     = DMXSlider(i)\w
    tmpa  =  w / 10
    DMXSlider(i)\hb = w + tmpa
    DMXSlider(i)\lImage_02 = CreateImage(#PB_Any, DMXSlider(i)\w, DMXSlider(i)\w + tmpa)
    If DMXSlider(i)\lImage_02 <> 0
      If StartDrawing(ImageOutput(DMXSlider(i)\lImage_02))
        If DMXSlider(i)\disable = 1
          Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, #DMX_Color_White)
          Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, #DMX_Color_White)
          Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, #DMX_Color_White)
          Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, #DMX_Color_White)
          Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, #DMX_Color_White)
          Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, #DMX_Color_White)
          Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, #DMX_Color_White)
          Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, #DMX_Color_White)
        Else
          If DMXSlider(i)\color = -1
            Couleur(0) = #DMXSlider_Color_01
            Couleur(1) = #DMXSlider_Color_02
            Couleur(2) = #DMXSlider_Color_03
            Couleur(3) = #DMXSlider_Color_04
            Couleur(4) = #DMXSlider_Color_05
            Couleur(5) = #DMXSlider_Color_06
            Couleur(6) = #DMXSlider_Color_07
            Couleur(7) = #DMXSlider_Color_08
          Else
            Couleur(0) = ColorSubstitute(#DMXSlider_Color_01, DMXSlider(i)\Color)
            Couleur(1) = ColorSubstitute(#DMXSlider_Color_02, DMXSlider(i)\Color)
            Couleur(2) = ColorSubstitute(#DMXSlider_Color_03, DMXSlider(i)\Color)
            Couleur(3) = ColorSubstitute(#DMXSlider_Color_04, DMXSlider(i)\Color)
            Couleur(4) = ColorSubstitute(#DMXSlider_Color_05, DMXSlider(i)\Color)
            Couleur(5) = ColorSubstitute(#DMXSlider_Color_06, DMXSlider(i)\Color)
            Couleur(6) = ColorSubstitute(#DMXSlider_Color_07, DMXSlider(i)\Color)
            Couleur(7) = ColorSubstitute(#DMXSlider_Color_08, DMXSlider(i)\Color)
          EndIf
        EndIf
        Box(0, 0, w,     w + tmpa,     Couleur(0))
        Box(1, 1, w - 2, w + tmpa - 2, Couleur(6))
        Box(2, 2, w - 4, w + tmpa - 4, Couleur(2))
        tmpb = (DMXSlider(i)\w / 6) - 1
        pasa = (Red(Couleur(0))   - Red(Couleur(4)))   / tmpb : mula = Red(Couleur(0))
        pasb = (Green(Couleur(0)) - Green(Couleur(4))) / tmpb : mulb = Green(Couleur(0))
        pasc = (Blue(Couleur(0))  - Blue(Couleur(4)))  / tmpb : mulc = Blue(Couleur(0))
        For i = 1 To tmpb Step 1
          mula = mula - pasa
          mulb = mulb - pasb
          mulc = mulc - pasc
          LineXY(1, i, w - 2, i, RGB(mula, mulb, mulc))
          LineXY(1, (w + tmpa - 1) - i, w - 2, (w + tmpa - 1) - i, RGB(mula, mulb, mulc))
        Next i
        LineXY(1, tmpb + 1, w - 2, tmpb + 1, Couleur(5))
        LineXY(1, (w + tmpa) - tmpb - 2, w - 2, (w + tmpa) - tmpb - 2, Couleur(5))
        LineXY(1, ((w + tmpa) / 2),   w - 2, ((w + tmpa) / 2),   Couleur(1))
        LineXY(1, ((w + tmpa) / 2) - 1, w - 2, ((w + tmpa) / 2) - 1, Couleur(0))
        tmpc = ((w+tmpa)/2) - (tmpb * 2)
        mula = Red(Couleur(1))
        mulb = Green(Couleur(1))
        mulc = Blue(Couleur(1))
        pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc
        pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc
        pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc
        For i = 1 To tmpc Step 1
          mula = mula + pasa
          mulb = mulb + pasb
          mulc = mulc + pasc
          LineXY(3, tmpb + 1 + i, w - 4, tmpb + 1 + i,   RGB(mula, mulb, mulc))
          LineXY(3, (w + tmpa) - tmpb - 2 - i, w - 4, (w + tmpa) - tmpb - 2 - i, RGB(mula, mulb, mulc))
        Next i
        StopDrawing()
      EndIf
    EndIf
  EndIf

EndProcedure

Procedure DMXSliderGadget_Draw(gadget.l)
; ROUTINE DE TRACAGE DU DMX SILDER COMPLET.
  Protected i.l   = SetFindDMXGadget(gadget)

  If StartDrawing(CanvasOutput(DMXSlider(i)\lCanva_01))
    If DMXSlider(i)\lImage_01 <> 0
      DrawAlphaImage(ImageID(DMXSlider(i)\lImage_01), 0, 0)
    EndIf
    If DMXSlider(i)\lImage_02 <> 0
      DrawImage(ImageID(DMXSlider(i)\lImage_02), 0, DMXSlider(i)\state)
    EndIf
    StopDrawing()
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, value.l=0, min.l=0, max.l=100, color.l=#DMX_Color_Default)
;
; ROUTINE DE GETION DES BOUTONS.
  Protected i.l
  Protected j.l
  Protected tmps.l
  Protected gnew.b = #False
  
  ;
  ; ROUTINE DE VERIFICATION DU NUMERO DU GADGET.
  ;
  If gadget = #PB_Any
  EndIf
  For i=1 To numDMXSlider
    If DMXSlider(i)\gadget = gadget
      j = i
      gnew = #True
    EndIf
  Next i
  If gnew = #False
    numDMXSlider + 1
    j = numDMXSlider
    ReDim DMXSlider.DMXSlider(numDMXSlider)
  EndIf

  ;
  ; ROUTINE DE VERIFICATION DES VALEURS.
  ;
  If value < 0
    value = 0
  EndIf
  If value > max
    value = max
  EndIf
  tmps = w + (w / 10)

  ;
  ; ROUTINE D'ENREGISTREMENT DES INFORMATIONS.
  ;
  DMXSlider(j)\gadget     = gadget
  DMXSlider(j)\x          = x
  DMXSlider(j)\y          = y
  DMXSlider(j)\w          = w
  DMXSlider(j)\h          = h
  DMXSlider(j)\pas        = (max - min) / (h - tmps)
  DMXSlider(j)\min        = min
  DMXSlider(j)\max        = max
  DMXSlider(j)\WheelZoom  = #DMX_Zoom_x1
  DMXSlider(j)\state      = (-value + (DMXSlider(j)\max - DMXSlider(j)\min)) / DMXSlider(j)\pas
  DMXSlider(j)\value      = value + min
  DMXSlider(j)\color      = color
  DMXSlider(j)\disable    = 0
  
  ;
  ; ROUTINE DE TACAGE DU DMX SLIDER GADGET.
  ;
  If DMXSlider(i)\lCanva_01 <> 0
    FreeGadget(DMXSlider(i)\lCanva_01)  
  EndIf
  DMXSlider(i)\lCanva_01 = CanvasGadget(#PB_Any, DMXSlider(i)\x, DMXSlider(i)\y, DMXSlider(i)\w, DMXSlider(i)\h, #PB_Canvas_Keyboard)
  SetDrawSlider_Button(DMXSlider(j)\gadget)
  SetDrawSlider_Regulatory(DMXSlider(j)\gadget)
  DMXSliderGadget_Draw(DMXSlider(j)\gadget)

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure.l DMXGadget_Event(event.l, evenp.l, eveng.l)
;
  Protected i.l
  Protected lMosY.l

  If event = #PB_Event_Gadget
    For i=1 To numDMXSlider
      If eveng = DMXSlider(i)\lCanva_01
        If DMXSlider(i)\disable = 0
          If evenp = #PB_EventType_MouseWheel
            DMXSlider(i)\value + (GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_WheelDelta) * DMXSlider(i)\WheelZoom) * DMXSlider(i)\pas
            If DMXSlider(i)\value < DMXSlider(i)\min
              DMXSlider(i)\value = DMXSlider(i)\min
            ElseIf DMXSlider(i)\value > DMXSlider(i)\max
              DMXSlider(i)\value = DMXSlider(i)\max
            EndIf
            If DMXSlider(i)\min = 0
              DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas)
            Else
              DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas) - 2
            EndIf
            DMXSliderGadget_Draw(DMXSlider(i)\gadget)
            ProcedureReturn DMXSlider(i)\gadget
          EndIf
          If evenp = #PB_EventType_LeftButtonDown Or (evenp = #PB_EventType_MouseMove And GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton)
            lMosY = GetGadgetAttribute(DMXSlider(i)\lCanva_01, #PB_Canvas_MouseY) - (DMXSlider(i)\hb / 2)
            If lMosY < 0
              lMosY = 0
            EndIf
            If DMXSlider(i)\value <> DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
              If lMosY <= DMXSlider(i)\h - DMXSlider(i)\hb
                DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - (lMosY * DMXSlider(i)\pas)
              Else
                DMXSlider(i)\value = DMXSlider(i)\min + (DMXSlider(i)\max - DMXSlider(i)\min) - ((DMXSlider(i)\h - DMXSlider(i)\hb) * DMXSlider(i)\pas)
              EndIf
              If lMosY > (DMXSlider(i)\h - (DMXSlider(i)\hb))
                lMosY = DMXSlider(i)\h - DMXSlider(i)\hb
              EndIf
              DMXSlider(i)\state = lMosY
              DMXSliderGadget_Draw(DMXSlider(i)\gadget)
              ProcedureReturn DMXSlider(i)\gadget
            EndIf
          EndIf
        EndIf
      EndIf
    Next i
  EndIf
  ProcedureReturn -1

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure WheelZoomDMXGadget(gadget.l, zoom.l = 0)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    Select zoom
      Case 0
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
      Case 1
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x2
      Case 2
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x4
      Case 3
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x8
      Case 4
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x16
      Case 5
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x32
      Default
        DMXSlider(i)\WheelZoom = #DMX_Zoom_x1
    EndSelect
  EndIf
  
EndProcedure

Procedure.l GetDMXGadgetState(gadget.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    ProcedureReturn DMXSlider(i)\value
  EndIf

EndProcedure

Procedure.l SetDMXGadgetState(gadget.l, value.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    If value < DMXSlider(i)\min
      value = DMXSlider(i)\min
    ElseIf value > DMXSlider(i)\max
      value = DMXSlider(i)\max
    EndIf
    DMXSlider(i)\value = value
    If DMXSlider(i)\min = 0
      DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas)
    Else
      DMXSlider(i)\state = (DMXSlider(i)\min + (-DMXSlider(i)\value + (DMXSlider(i)\max - DMXSlider(i)\min)) / DMXSlider(i)\pas) - 2
    EndIf
    DMXSliderGadget_Draw(gadget)
  EndIf

EndProcedure

Procedure DisableDMXGadget(gadget.l, etat.l)
;
  Protected i.l   = SetFindDMXGadget(gadget)
  
  If i > -1
    If DMXSlider(i)\disable <> etat
      DMXSlider(i)\disable = etat
      SetDrawSlider_Button(gadget)
      SetDrawSlider_Regulatory(gadget)
      DMXSliderGadget_Draw(gadget)
    EndIf
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define j.l = 1
Define event.l
Define evenp.l
Define eveng.l
Define dmxev.l

Define hWnd.l = OpenWindow(0, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
If hWnd <> 0
   SmartWindowRefresh(0, 1)
   DMXSliderGadget(0, 10,  20, 44, 256, 0, 10, 285, #DMX_Color_Gray)
   DMXSliderGadget(1, 58,  20, 44, 256, 0, 11, 255, #DMX_Color_Red)
   DMXSliderGadget(2, 106, 20, 44, 256, 0, 0, 255, #DMX_Color_Green)
   DMXSliderGadget(3, 154, 20, 44, 256, 0, 0, 255, #DMX_Color_Blue)
   DMXSliderGadget(4, 250, 20, 44, 256, 0, 0, 255, #DMX_Color_Cyan)
   DMXSliderGadget(5, 298, 20, 44, 256, 0, 0, 255, #DMX_Color_Purple)
   DMXSliderGadget(6, 346, 20, 44, 512, 0, 100, 255, #DMX_Color_Yellow)
   DMXSliderGadget(7, 394, 20, 88, 512, 127, 0, 255, #DMX_Color_Default)

   WheelZoomDMXGadget(0, 5)
   WheelZoomDMXGadget(7, 3)
   SetDMXGadgetState(1, 300)
   SetDMXGadgetState(4, 100)

   ButtonGadget(0, 500, 5, 80, 40, "Disabled")
   TextGadget(1, 10, 5, 44, 12,  Str(GetDMXGadgetState(0)), #PB_Text_Center)
   TextGadget(2, 58, 5, 44, 12,  Str(GetDMXGadgetState(1)), #PB_Text_Center)
   TextGadget(3, 106, 5, 44, 12, Str(GetDMXGadgetState(2)), #PB_Text_Center)
   TextGadget(4, 154, 5, 44, 12, Str(GetDMXGadgetState(3)), #PB_Text_Center)
   TextGadget(5, 250, 5, 44, 12, Str(GetDMXGadgetState(4)), #PB_Text_Center)
   TextGadget(6, 298, 5, 44, 12, Str(GetDMXGadgetState(5)), #PB_Text_Center)
   TextGadget(7, 346, 5, 44, 12, Str(GetDMXGadgetState(6)), #PB_Text_Center)
   TextGadget(8, 394, 5, 88, 12, Str(GetDMXGadgetState(7)), #PB_Text_Center)
   Repeat
    event = WaitWindowEvent(20)
    evenp = EventType()
    eveng = EventGadget()
    
    dmxev = DMXGadget_Event(event, evenp, eveng)
    Select dmxev
      Case 0
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 1
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 2
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 3
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 4
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 5
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 6
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
      Case 7
        SetGadgetText(dmxev + 1, Str(GetDMXGadgetState(dmxev)))
    EndSelect

    If event = #PB_Event_Gadget
      If eveng = 0
        If i = 0
          i = 1
          SetGadgetText(0, "enabled")
        Else
          i = 0
          SetGadgetText(0, "Disabled")
        EndIf
        DisableDMXGadget(0, i)
        DisableDMXGadget(1, i)
        DisableDMXGadget(2, i)
        DisableDMXGadget(3, i)
        DisableDMXGadget(4, i)
        DisableDMXGadget(5, i)
        DisableDMXGadget(6, i)
        DisableDMXGadget(7, i)
      EndIf
    EndIf
    
  Until event = #PB_Event_CloseWindow
EndIf
cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre