Le debut de mon slider (Potentiometre)

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour tous,

J'ai commencer a faire mon petit slider (potentiometre) comme l'image ci-dessous. Bon c'est vraiment le debut mais bon il est redimentionnable c'est deja cela :)

Image

Et voila le code-source (enfin le debut test). Donner moi vos avis.

Code : Tout sélectionner

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

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

DisableASM
EnableExplicit

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

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES (GLOBALE).

;{ - CONSTANTES
#WinMinX      = 640
#WinMinY      = 506
#WinLenX      = 800
#WinLenY      = 600
;}
;{ - ENUMERATION
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #picture_0
EndEnumeration
;}

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

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

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, etat.l, min.l, max.l)
; ROUTINE DE GETION DES BOUTONS.
  Protected i.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

  If CreateImage(#picture_0, w, h)
    If StartDrawing(ImageOutput(#picture_0))
      tmpa = w/2
      Box(0, 0, w, h, $f9f3ed)
      Box(tmpa-1, 0, 2, h, $d5b08c)
      LineXY(tmpa-1, 0, tmpa-1, h,  $8e6235)
      LineXY(tmpa-1, 0, tmpa  , 0,  $8e6235)
      LineXY(tmpa+1, 0, tmpa+1, h,  $e9d6c2)
      LineXY(tmpa, h-1, tmpa+1, h-1,$e9d6c2)
      tmpb = max - min
      pasa = h / tmpb
      For i=0 To h
        LineXY(0, i, tmpa-4, i, $d5b08c)
        LineXY(tmpa+4, i, w, i, $d5b08c)
        i + (pasa * 4)
      Next i
      
      tmpa = w/10
      Box(0, 0+etat, w,   w+tmpa,   $8e6235)
      Box(1, 1+etat, w-2, w+tmpa-2, $e6d0b9)
      Box(2, 2+etat, w-4, w+tmpa-4, $d5b08c)
      tmpb = (w/6)-1
      pasa = (Red($8e6235)   - Red($b88957))   / tmpb : mula = Red($8e6235)
      pasb = (Green($8e6235) - Green($b88957)) / tmpb : mulb = Green($8e6235)
      pasc = (Blue($8e6235)  - Blue($b88957))  / tmpb : mulc = Blue($8e6235)
      For i = 1 To tmpb Step 1
        mula = mula - pasa
        mulb = mulb - pasb
        mulc = mulc - pasc
        LineXY(1, i+etat, w-2, i+etat, RGB(mula,mulb,mulc))
        LineXY(1, (w+tmpa-1)-i+etat, w-2, (w+tmpa-1)-i+etat, RGB(mula,mulb,mulc))
      Next i
      LineXY(1, tmpb+1+etat, w-2, tmpb+1+etat, $dcbd9e)
      LineXY(1, (w+tmpa)-tmpb-2+etat, w-2, (w+tmpa)-tmpb-2+etat, $dcbd9e)
      LineXY(1, ((w+tmpa)/2)+etat,   w-2, ((w+tmpa)/2)+etat,   $c69662)
      LineXY(1, ((w+tmpa)/2)-1+etat, w-2, ((w+tmpa)/2)-1+etat, $e9d6c2)
      tmpc = ((w+tmpa)/2) - (tmpb * 2)
      pasa = (Red($d5b08c)   - Red($e9d6c2))   / tmpc : mula = Red($e9d6c2)
      pasb = (Green($d5b08c) - Green($e9d6c2)) / tmpc : mulb = Green($e9d6c2)
      pasc = (Blue($d5b08c)  - Blue($e9d6c2))  / tmpc : mulc = Blue($e9d6c2)
      For i = 1 To tmpc Step 1
        mula = mula + pasa
        mulb = mulb + pasb
        mulc = mulc + pasc
        LineXY(3, tmpb+1+i+etat, w-4, tmpb+1+i+etat, RGB(mula,mulb,mulc))
        LineXY(3, (w+tmpa)-tmpb-2-i+etat, w-4, (w+tmpa)-tmpb-2-i+etat, RGB(mula,mulb,mulc))
      Next i
      StopDrawing()
    EndIf
    SetGadgetState(#picture_0, ImageID(#picture_0))
  EndIf

EndProcedure

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

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

Define i.l
Define event.l

Define hWnd.l = OpenWindow(#Window_0, 0, 0, #WinLenX, #WinLenY, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_Maximize)
If hWnd <> 0
  SmartWindowRefresh(#Window_0, 1)
  ImageGadget(#picture_0, 200, 256, 24, 200, 0)
  Repeat
    event   = WaitWindowEvent(50)
    i+1
    If i> 230
      i=0
    EndIf
    DMXSliderGadget(0, 0, 0, 24, 256, i, 0, 255)
  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)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Le debut de mon slider (Potentiometre)

Message par Le Soldat Inconnu »

Sympa :)

Avec couleur personnalisable :)

Code : Tout sélectionner

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

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

DisableASM
EnableExplicit

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

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES (GLOBALE).

;{ - CONSTANTES
#WinMinX      = 640
#WinMinY      = 506
#WinLenX      = 800
#WinLenY      = 600
;}
;{ - ENUMERATION
Enumeration
	#Window_0
EndEnumeration
Enumeration
	#picture_0
	#picture_1
	#picture_2
EndEnumeration
;}

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

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

Procedure.l ColorSubstitute2(Color, FinalColor) ; Changer une nuance de couleur par une autre
  Protected Rouge, Vert, Bleu, Alpha, a.d, Nuance_Blanc, Nuance_Noir, b.d
  
  Rouge = Color & $FF
  Vert = Color >> 8 & $FF
  Bleu = Color >> 16 & $FF
	Alpha = Color >> 24
  
  If Bleu >= Vert And Bleu >= Rouge And Bleu > 0
    a = 255 / Bleu
    Nuance_Noir = 255 - Bleu
    Bleu = 255
    Vert = a * Vert
    Rouge = a * Rouge
	ElseIf Vert >= Bleu And Vert >= Rouge And Vert > 0
    a = 255 / Vert
    Nuance_Noir = 255 - Vert
    Bleu = a * Bleu
    Vert = 255
    Rouge = a * Rouge
	ElseIf Rouge >= Vert And Rouge >= Bleu And Rouge > 0
    a = 255 / Rouge
    Nuance_Noir = 255 - Rouge
    Bleu = a * Bleu
    Vert = a * Vert
    Rouge = 255
	Else
    Nuance_Noir = 255
    Bleu = 255
    Vert = 255
    Rouge = 255
	EndIf
  
  If Bleu < Vert And Bleu < Rouge
    ; a = Bleu / 255
    Nuance_Blanc = 255 - Bleu
    ; Vert = (Vert - Bleu) / (1 - a)
    ; Rouge = (Rouge - Bleu) / (1 - a)
    ; Bleu = 0
	ElseIf Vert < Bleu And Vert < Rouge
    ; a = Vert / 255
    Nuance_Blanc = 255 - Vert
    ; Bleu = (Bleu - Vert) / (1 - a)
    ; Rouge = (Rouge - Vert) / (1 - a)
    ; Vert = 0
	ElseIf Rouge < Bleu And Rouge < Vert
    ; a = Rouge / 255
    Nuance_Blanc = 255 - Rouge
    ; Bleu = (Bleu - Rouge) / (1 - a)
    ; Vert = (Vert - Rouge) / (1 - a)
    ; Rouge = 0
	Else
    Nuance_Blanc = 255
	EndIf
  
  Rouge = FinalColor & $FF
  Vert = FinalColor >> 8 & $FF
  Bleu = FinalColor >> 16
  
  If Bleu >= Vert And Bleu >= Rouge And Bleu > 0
    a = 255 / Bleu
    ; Nuance_Noir = 255 - Bleu
    Bleu = 255
    Vert = a * Vert
    Rouge = a * Rouge
	ElseIf Vert >= Bleu And Vert >= Rouge And Vert > 0
    a = 255 / Vert
    ; Nuance_Noir = 255 - Vert
    Bleu = a * Bleu
    Vert = 255
    Rouge = a * Rouge
	ElseIf Rouge >= Vert And Rouge >= Bleu And Rouge > 0
    a = 255 / Rouge
    ; Nuance_Noir = 255 - Rouge
    Bleu = a * Bleu
    Vert = a * Vert
    Rouge = 255
	EndIf
  
  If Bleu < Vert And Bleu < Rouge
    a = 1 - Bleu / 255
    ; Nuance_Blanc = 255 - Bleu
    Vert = (Vert - Bleu) / a
    Rouge = (Rouge - Bleu) / a
    Bleu = 0
	ElseIf Vert < Bleu And Vert < Rouge
    a = 1 - Vert / 255
    ; Nuance_Blanc = 255 - Vert
    Bleu = (Bleu - Vert) / a
    Rouge = (Rouge - Vert) / a
    Vert = 0
	ElseIf Rouge < Bleu And Rouge < Vert
    a = 1 - Rouge / 255
    ; Nuance_Blanc = 255 - Rouge
    Bleu = (Bleu - Rouge) / a
    Vert = (Vert - Rouge) / a
    Rouge = 0
	EndIf
  
  
  
  a = 1 - Nuance_Blanc / 255
  b = (255 - Nuance_Noir) / 255
  Rouge = (Rouge + (255 - Rouge) * a) * b
  If Rouge < 0
    Rouge = 0
	ElseIf Rouge > 255
    Rouge = 255
	EndIf
  Vert = (Vert + (255 - Vert) * a) * b
  If Vert < 0
    Vert = 0
	ElseIf Vert > 255
    Vert = 255
	EndIf
  Bleu = (Bleu + (255 - Bleu) * a) * b
  If Bleu < 0
    Bleu = 0
	ElseIf Bleu > 255
    Bleu = 255
	EndIf
  
  ProcedureReturn (Rouge | Vert <<8 | Bleu << 16 | Alpha << 24)
EndProcedure

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, state.l, min.l, max.l, Color.l)
; ROUTINE DE GETION DES BOUTONS.
	Protected i.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(8)
	Couleur(0) = ColorSubstitute2($8E6235, Color)
	Couleur(1) = ColorSubstitute2($E9D6C2, Color)
	Couleur(2) = ColorSubstitute2($D5B08C, Color)
	Couleur(3) = ColorSubstitute2($F9F3ED, Color)
	Couleur(4) = ColorSubstitute2($B88957, Color)
	Couleur(5) = ColorSubstitute2($DCBD9E, Color)
	Couleur(6) = ColorSubstitute2($C69662, Color)
	Couleur(7) = ColorSubstitute2($E6D0B9, Color)
	
	If CreateImage(gadget, w, h)
		If StartDrawing(ImageOutput(gadget))
			tmpa = w/2
			Box(0, 0, w, h, Couleur(3))
			Box(tmpa-1, 0, 2, h, Couleur(2))
			LineXY(tmpa-1, 0, tmpa-1, h,  Couleur(0))
			LineXY(tmpa-1, 0, tmpa  , 0,  Couleur(0))
			LineXY(tmpa+1, 0, tmpa+1, h,  Couleur(1))
			LineXY(tmpa, h-1, tmpa+1, h-1,Couleur(1))
			tmpb = max - min
			pasa = h / tmpb
			For i=0 To h
				LineXY(0, i, tmpa-4, i, Couleur(2))
				LineXY(tmpa+4, i, w, i, Couleur(2))
				i + (pasa * 4)
			Next i
			
			tmpa = w/10
			Box(0, 0+state, w,   w+tmpa,   Couleur(0))
			Box(1, 1+state, w-2, w+tmpa-2, Couleur(7))
			Box(2, 2+state, w-4, w+tmpa-4, Couleur(2))
			tmpb = (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+state, w-2, i+state, RGB(mula,mulb,mulc))
				LineXY(1, (w+tmpa-1)-i+state, w-2, (w+tmpa-1)-i+state, RGB(mula,mulb,mulc))
			Next i
			LineXY(1, tmpb+1+state, w-2, tmpb+1+state, Couleur(5))
			LineXY(1, (w+tmpa)-tmpb-2+state, w-2, (w+tmpa)-tmpb-2+state, Couleur(5))
			LineXY(1, ((w+tmpa)/2)+state,   w-2, ((w+tmpa)/2)+state,   Couleur(6))
			LineXY(1, ((w+tmpa)/2)-1+state, w-2, ((w+tmpa)/2)-1+state, Couleur(1))
			tmpc = ((w+tmpa)/2) - (tmpb * 2)
			pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc : mula = Red(Couleur(1))
			pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc : mulb = Green(Couleur(1))
			pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc : mulc = Blue(Couleur(1))
			For i = 1 To tmpc Step 1
				mula = mula + pasa
				mulb = mulb + pasb
				mulc = mulc + pasc
				LineXY(3, tmpb+1+i+state, w-4, tmpb+1+i+state, RGB(mula,mulb,mulc))
				LineXY(3, (w+tmpa)-tmpb-2-i+state, w-4, (w+tmpa)-tmpb-2-i+state, RGB(mula,mulb,mulc))
			Next i
			StopDrawing()
		EndIf
		SetGadgetState(gadget, ImageID(gadget))
	EndIf

EndProcedure

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

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

Define i.l
Define event.l
Define evtpe.l
Define evtme.l
Define eveng.l
Define softquit.b = #False

Define hWnd.l = OpenWindow(#Window_0, 0, 0, #WinLenX, #WinLenY, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_Maximize)
If hWnd <> 0
	SmartWindowRefresh(#Window_0, 1)
	ImageGadget(#picture_0, 200, 256, 24, 200, 0)
	ImageGadget(#picture_1, 250, 256, 24, 200, 0)
	ImageGadget(#picture_2, 300, 256, 24, 200, 0)
	

	Repeat
		event   = WaitWindowEvent(50)
		evtpe   = EventType()
		evtme   = EventMenu()
		eveng   = EventGadget()
		
		i+1
		If i> 230
			i=0
		EndIf
		DMXSliderGadget(#picture_0, 0, 0, 24, 256, i, 0, 255, RGB(255, 0, 0))
		DMXSliderGadget(#picture_1, 0, 0, 24, 256, i, 0, 255, RGB(0, 255, 0))
		DMXSliderGadget(#picture_2, 0, 0, 24, 256, i, 0, 255, RGB(0, 0, 255))

		If event = #PB_Event_CloseWindow
				If MessageRequester("", "Voulez-vous quitter vraiment le logiciel?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
					softquit = #True
				EndIf
		EndIf
	Until softquit = #True
EndIf
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonsoir Le Soldat Inconnu,

J'avais prevus de le rendre modifiable au niveau des couleur mais voila tu me l'as fait alors merci :). j'en avais pas mal chier pour faire tout les degradés et surotu qu'il soit propre ce slider :). par contre avec ton code je me dit qu'il faut plutot que je parte des couleur en gris pour qu'il donne de bonne couleur, non?

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
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: Le debut de mon slider (Potentiometre)

Message par Cool Dji »

Faire les boutons en prog, joli !

Tu pourrais pas faire une procédure qui dessine le bouton (initialisation et stokage dans une image) et uniquement le déplacer dans la boucle ?
Là, il me semble que tu redessines à chaque fois le bouton complètement.

En tous les cas, c'est classe
Tu comptes faire un système de fenetre aussi sur le même principe (avec possibilité de changer les couleurs) ?
Only PureBasic makes it possible
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour,

Cool Dji> en fait c'est pour un soft pour moi je penses que c'ete plutot pour les gadgets du logiciel pas forcement les fenêtre (mais bon pourquoi pas :)).

Le Soldat Inconnu> Apres quelque test vraiment classe ta routine pour modifier les couleurs et cela peu donner l'exemple plus bas avec plussieurs couleur et 2 tailles differente :)

Code : Tout sélectionner

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

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

DisableASM
EnableExplicit

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

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+
;- DECLARATION DES VARIABLES (GLOBALE).

;{ - CONSTANTES
#WinMinX      = 640
#WinMinY      = 506
#WinLenX      = 800
#WinLenY      = 600
;}
;{ - ENUMERATION
Enumeration
   #Window_0
EndEnumeration
Enumeration
   #picture_0
   #picture_1
   #picture_2
   #picture_3
   #picture_4
   #picture_5
   #picture_6
   #picture_7
EndEnumeration
;}

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

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

Procedure.l ColorSubstitute2(Color, FinalColor)
  Protected Rouge, Vert, Bleu, Alpha, a.d, Nuance_Blanc, Nuance_Noir, b.d

  Rouge = Color & $FF
  Vert  = Color >> 8 & $FF
  Bleu  = Color >> 16 & $FF
  Alpha = Color >> 24
  
  If Bleu >= Vert And Bleu >= Rouge And Bleu > 0
    a = 255 / Bleu
    Nuance_Noir = 255 - Bleu
    Bleu = 255
    Vert = a * Vert
    Rouge = a * Rouge
  ElseIf Vert >= Bleu And Vert >= Rouge And Vert > 0
    a = 255 / Vert
    Nuance_Noir = 255 - Vert
    Bleu = a * Bleu
    Vert = 255
    Rouge = a * Rouge
  ElseIf Rouge >= Vert And Rouge >= Bleu And Rouge > 0
    a = 255 / Rouge
    Nuance_Noir = 255 - Rouge
    Bleu = a * Bleu
    Vert = a * Vert
    Rouge = 255
  Else
    Nuance_Noir = 255
    Bleu = 255
    Vert = 255
    Rouge = 255
  EndIf
  If Bleu < Vert And Bleu < Rouge
    Nuance_Blanc = 255 - Bleu
    ; Vert = (Vert - Bleu) / (1 - a)
    ; Rouge = (Rouge - Bleu) / (1 - a)
    ; Bleu = 0
  ElseIf Vert < Bleu And Vert < Rouge
    ; a = Vert / 255
    Nuance_Blanc = 255 - Vert
    ; Bleu = (Bleu - Vert) / (1 - a)
    ; Rouge = (Rouge - Vert) / (1 - a)
    ; Vert = 0
  ElseIf Rouge < Bleu And Rouge < Vert
    ; a = Rouge / 255
    Nuance_Blanc = 255 - Rouge
    ; Bleu = (Bleu - Rouge) / (1 - a)
    ; Vert = (Vert - Rouge) / (1 - a)
    ; Rouge = 0
  Else
    Nuance_Blanc = 255
  EndIf  
  Rouge = FinalColor & $FF
  Vert  = FinalColor >> 8 & $FF
  Bleu  = FinalColor >> 16
  If Bleu >= Vert And Bleu >= Rouge And Bleu > 0
    a = 255 / Bleu
    ; Nuance_Noir = 255 - Bleu
    Bleu = 255
    Vert = a * Vert
    Rouge = a * Rouge
  ElseIf Vert >= Bleu And Vert >= Rouge And Vert > 0
    a = 255 / Vert
    ; Nuance_Noir = 255 - Vert
    Bleu = a * Bleu
    Vert = 255
    Rouge = a * Rouge
  ElseIf Rouge >= Vert And Rouge >= Bleu And Rouge > 0
    a = 255 / Rouge
    ; Nuance_Noir = 255 - Rouge
    Bleu = a * Bleu
    Vert = a * Vert
    Rouge = 255
  EndIf
  If Bleu < Vert And Bleu < Rouge
    a = 1 - Bleu / 255
    ; Nuance_Blanc = 255 - Bleu
    Vert = (Vert - Bleu) / a
    Rouge = (Rouge - Bleu) / a
    Bleu = 0
  ElseIf Vert < Bleu And Vert < Rouge
    a = 1 - Vert / 255
    ; Nuance_Blanc = 255 - Vert
    Bleu = (Bleu - Vert) / a
    Rouge = (Rouge - Vert) / a
    Vert = 0
  ElseIf Rouge < Bleu And Rouge < Vert
    a = 1 - Rouge / 255
    ; Nuance_Blanc = 255 - Rouge
    Bleu = (Bleu - Rouge) / a
    Vert = (Vert - Rouge) / a
    Rouge = 0
  EndIf
  a = 1 - Nuance_Blanc / 255
  b = (255 - Nuance_Noir) / 255
  Rouge = (Rouge + (255 - Rouge) * a) * b
  If Rouge < 0
    Rouge = 0
   ElseIf Rouge > 255
    Rouge = 255
   EndIf
  Vert = (Vert + (255 - Vert) * a) * b
  If Vert < 0
    Vert = 0
   ElseIf Vert > 255
    Vert = 255
   EndIf
  Bleu = (Bleu + (255 - Bleu) * a) * b
  If Bleu < 0
    Bleu = 0
   ElseIf Bleu > 255
    Bleu = 255
   EndIf  
  ProcedureReturn (Rouge | Vert <<8 | Bleu << 16 | Alpha << 24)
  
EndProcedure

Procedure DMXSliderGadget(gadget.l, x.l, y.l, w.l, h.l, state.l, min.l, max.l, Color.l)
; ROUTINE DE GETION DES BOUTONS.
   Protected i.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)
   
   Couleur(0) = ColorSubstitute2($8E6235, Color)
   Couleur(1) = ColorSubstitute2($E9D6C2, Color)
   Couleur(2) = ColorSubstitute2($D5B08C, Color)
   Couleur(3) = ColorSubstitute2($F9F3ED, Color)
   Couleur(4) = ColorSubstitute2($B88957, Color)
   Couleur(5) = ColorSubstitute2($DCBD9E, Color)
   Couleur(6) = ColorSubstitute2($C69662, Color)
   Couleur(7) = ColorSubstitute2($E6D0B9, Color)
   
   If CreateImage(gadget, w, h)
      If StartDrawing(ImageOutput(gadget))
         tmpa = w/2
         Box(0, 0, w, h, Couleur(3))
         Box(tmpa-1, 0, 2, h, Couleur(2))
         LineXY(tmpa-1, 0, tmpa-1, h,  Couleur(0))
         LineXY(tmpa-1, 0, tmpa  , 0,  Couleur(0))
         LineXY(tmpa+1, 0, tmpa+1, h,  Couleur(1))
         LineXY(tmpa, h-1, tmpa+1, h-1,Couleur(1))
         tmpb = max - min
         pasa = h / tmpb
         For i=0 To h
            LineXY(0, i, tmpa-4, i, Couleur(2))
            LineXY(tmpa+4, i, w, i, Couleur(2))
            i + (pasa * 4)
         Next i
         
         tmpa = w/10
         Box(0, 0+state, w,   w+tmpa,   Couleur(0))
         Box(1, 1+state, w-2, w+tmpa-2, Couleur(7))
         Box(2, 2+state, w-4, w+tmpa-4, Couleur(2))
         tmpb = (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+state, w-2, i+state, RGB(mula,mulb,mulc))
            LineXY(1, (w+tmpa-1)-i+state, w-2, (w+tmpa-1)-i+state, RGB(mula,mulb,mulc))
         Next i
         LineXY(1, tmpb+1+state, w-2, tmpb+1+state, Couleur(5))
         LineXY(1, (w+tmpa)-tmpb-2+state, w-2, (w+tmpa)-tmpb-2+state, Couleur(5))
         LineXY(1, ((w+tmpa)/2)+state,   w-2, ((w+tmpa)/2)+state,   Couleur(6))
         LineXY(1, ((w+tmpa)/2)-1+state, w-2, ((w+tmpa)/2)-1+state, Couleur(1))
         tmpc = ((w+tmpa)/2) - (tmpb * 2)
         pasa = (Red(Couleur(2))   - Red(Couleur(1)))   / tmpc : mula = Red(Couleur(1))
         pasb = (Green(Couleur(2)) - Green(Couleur(1))) / tmpc : mulb = Green(Couleur(1))
         pasc = (Blue(Couleur(2))  - Blue(Couleur(1)))  / tmpc : mulc = Blue(Couleur(1))
         For i = 1 To tmpc Step 1
            mula = mula + pasa
            mulb = mulb + pasb
            mulc = mulc + pasc
            LineXY(3, tmpb+1+i+state, w-4, tmpb+1+i+state, RGB(mula,mulb,mulc))
            LineXY(3, (w+tmpa)-tmpb-2-i+state, w-4, (w+tmpa)-tmpb-2-i+state, RGB(mula,mulb,mulc))
         Next i
         StopDrawing()
      EndIf
      SetGadgetState(gadget, ImageID(gadget))
   EndIf

EndProcedure

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

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

Define i.l
Define j.l = 1
Define event.l

Define hWnd.l = OpenWindow(#Window_0, 0, 0, #WinLenX, #WinLenY, "", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_Maximize)
If hWnd <> 0
   SmartWindowRefresh(#Window_0, 1)
   ImageGadget(#picture_0, 200, 256, 24, 200, 0)
   ImageGadget(#picture_1, 250, 256, 24, 200, 0)
   ImageGadget(#picture_2, 300, 256, 24, 200, 0)
   ImageGadget(#picture_3, 350, 256, 24, 200, 0)
   ImageGadget(#picture_4, 400, 256, 44, 200, 0)
   ImageGadget(#picture_5, 450, 256, 44, 200, 0)
   ImageGadget(#picture_6, 500, 256, 44, 200, 0)
   ImageGadget(#picture_7, 550, 256, 44, 200, 0)
   Repeat
      event   = WaitWindowEvent(50)      
      i+j
      If i<1
        j=1
      EndIf
      If i> 230
        j=-1
      EndIf
      DMXSliderGadget(#picture_0, 0, 0, 24, 256, i, 0, 255, RGB(0, 0, 0))
      DMXSliderGadget(#picture_1, 0, 0, 24, 256, 230-i, 0, 255, RGB(255, 0, 0))
      DMXSliderGadget(#picture_2, 0, 0, 24, 256, i, 0, 255, RGB(0, 255, 0))
      DMXSliderGadget(#picture_3, 0, 0, 24, 256, 230-i, 0, 255, RGB(0, 0, 255))
      DMXSliderGadget(#picture_4, 0, 0, 44, 256, i, 0, 255, RGB(0, 255, 255))
      DMXSliderGadget(#picture_5, 0, 0, 44, 256, 230-i, 0, 255, RGB(255, 0, 255))
      DMXSliderGadget(#picture_6, 0, 0, 44, 256, i, 0, 255, RGB(255, 255, 0))
      DMXSliderGadget(#picture_7, 0, 0, 44, 256, 230-i, 0, 255, RGB(255, 255, 255))
   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)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Le debut de mon slider (Potentiometre)

Message par Le Soldat Inconnu »

La procedure de changement de couleur que j'ai utilisé permet de changer la teinte de n'importe quelle couleur :D Donc elle respecte la luminosité et la saturation de la couleur d'origine. C'est fort pratique pour changer la couleur d'un skin 8) Enfin, moi, je l'utilise pour ça.
Alors fais-en bon usage.
Elle vient de ma librairire Effect, regarde sur mon site, et fouille dans le code source et les exemples, tu y trouveras surement ton bonheur pour la gestion des couleurs.
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Le debut de mon slider (Potentiometre)

Message par Kwai chang caine »

Si vous voulez mon avis.....y sont super beaux vos boutons 8O
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour tous,

Le Soldat Inconnu> avec un peu de recul P.1 vraiment simpa le routine (pas comme elle est faite), juste parce que j'aurais pas pense prendre une tel piste pour rentre skynnable un soft. Alors en grand seigneur, Merci :)

Kwai chang caine> c'est plus ou moin les capture d'ecran que j'avais fait avec le mode peu en faire ce que je veux :). J'aimerais vraiment pouvoir en faire une lib que tout le monde peu utiliser avec le code ouvert a tous. je penses que les utilisations sont multiples enfin j'espere :).

Je vais essayer de voir aussi pour une potentiometre circulaire.

Encore merci a tous,
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
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Le debut de mon slider (Potentiometre)

Message par Kwai chang caine »

Je vais essayer de voir aussi pour une potentiomètre circulaire.
Ah ouaih !! comme quand j’étais jeune et que j'en achetais des que j'avais trois sous, a la place des étiquettes de footballeurs, ou de Q :? (En bas a gauche) :D
Image
Depuis ce temps des que je récupère une machine, je les démontent ainsi que les voyants commutateurs, etc...
Je peux pas laisser ces petites merveilles être détruites, ces mêmes merveilles que je rêvais tant de pouvoir acheter, mais a cette époque c’était trop cher :(
Alors j'me rattrape..j'en ai des tonnes..ma femme est contente :mrgreen:

Je les regardais des heures, les faisais basculer de droite de gauche car ils étaient "CROUMIR" et ça faisait des effets de lumière.
Comme dans l'ancien temps aussi, les images en aluminium relief, j'sais pas si ça avait un nom, c’était des feuilles d'alu collées sur du carton et gravées, y'avait des paysages, des bateaux..etc ..c’était splendide 8)
Bref...comme tous les vieux...j'm'egare.. :? comme quand ils voient une jolie fille :lol:

Peut etre ne connait tu pas ce code d'EINANDER et sera intéressé il a reproduit le bouton que je te parles vu du dessus 8)
English forum: http://www.purebasic.fr/english/viewtopic.php?t=15458

Y'a aussi SROD qui a fait un joli bouton rond, mais qui tourne pas, juste pour appuyer, si ça peut te servir, simple mais efficace, comme tout ce que fait SROD d'ailleurs :roll:

Code : Tout sélectionner

hwnd=OpenWindow(1,100,100,500,500,"Test Flat scroll Bar") 
CreateGadgetList(hwnd) 
SetWindowColor(1,$FF) 

Reg=CreateEllipticRgn_(10,10,90,90) 
ButtonGadget(15,100,100,100,100,"TEST",#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN) 
SetWindowRgn_(GadgetID(15),Reg,1) 

Repeat 

 Evenement = WaitWindowEvent() 
  
 If Evenement = #PB_Event_Gadget
  If EventGadget() = 15
   MessageRequester("","Clic sur bouton",0)
  EndIf 
 EndIf 
  
Until Evenement = #PB_Event_CloseWindow 
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Le debut de mon slider (Potentiometre)

Message par kernadec »

bonjour
avec effets :)
@GallyHc sympa les curseurs, merci
cordialement

Code : Tout sélectionner

OpenWindow(1,100,100,500,500,"Test Flat scroll Bar") 
SetWindowColor(1,$FF) 
If CreateImage(0, 100, 100) And StartDrawing(ImageOutput(0))
	DrawingMode(#PB_2DDrawing_Gradient)      
	BackColor($00FFFF)
	FrontColor($FF0000)
	CircularGradient(45, 45, 30)     
	Circle(45, 45, 50)
	CircularGradient(40, 30, 40)
	Circle(45, 45, 50)
	DrawingMode(1)
  DrawText(52, 52,"YES" ,#Gray ,#Gray)
	DrawText(50, 50,"YES" ,#Cyan ,#Gray)
	StopDrawing() 
EndIf

Reg=CreateEllipticRgn_(10,10,90,90) 

ButtonImageGadget(15,100,100,100,100, ImageID(0),#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN)

SetWindowRgn_(GadgetID(15),Reg,1) 

Repeat 
	
	Evenement = WaitWindowEvent() 
	
	If Evenement = #PB_Event_Gadget
		If EventGadget() = 15
			MessageRequester("","Clic sur bouton",0)
		EndIf 
	EndIf 
	
Until Evenement = #PB_Event_CloseWindow 

Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Le debut de mon slider (Potentiometre)

Message par Kwai chang caine »

Jolie boule 8O ....c'est la premiere fois que j'aime "à voir" les boules :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour tous,

Vraiment de tres bonne idees a mettre en oeuvre merci a tous. par contre j'aurais une question est'il possible de mettre la couleur de fond en transparence?

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
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour tous,

J'ai un tout petit modifier le design du slider (donner moi vos avis) :

Image
Image

Par contre je vais commencer a preparer pour en faire une sorte de DLL et j'aimerais avoir des conseils sur la marche a suivre si possible. Bien sur la DLL et le code seront donner ici pour que tous puisse l'utiliser et/ou le modifier :).

Cordialement,
GallyHC
Dernière modification par GallyHC le mer. 18/janv./2012 22:51, modifié 1 fois.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Le debut de mon slider (Potentiometre)

Message par Kwai chang caine »

On dirait des vrais 8O
j'aimerais avoir des conseils sur la marche a suivre si possible
Baaaah qu'est ce que tu veux savoir ??? :roll:
Y'a rien de compliqué....ou alors pour une fois ça veut dire que j'aurais compris :lol:
Avec PB les DLL c'est comme les procedures y'a qu'a mettre ProcedureDLL au lieu de procedure, changer le mode de compilation et roule ma poule ... :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Le debut de mon slider (Potentiometre)

Message par GallyHC »

Bonjour,

Pour faire une DLL pas de problème la chose que voudrais savoir c'est pour faire quelque chose d'aussi facile que "scintilla", si cela est possible pour ne pas surchager mon futur programme.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre