Page 1 sur 1

Un système de ProgresseBarre pour votre musette d'outils

Publié : ven. 27/avr./2018 15:32
par MLD
Bonjour a tous
J'ai eu besoin d'une ProgresseBarre un peu sympa. alors je me suis fait ceci pour ne pas y revenir a chaque fois.
C'est certainement perfectible, alors n’hésitez pas. :wink:

Code : Tout sélectionner

;MLD 27/04/2017
;PB5.62
#pg1 = 1:#pg2 = 2:#pg3 = 3:#pg4 = 4

Procedure avancepbar(gad,color_face,color_ombre,Pc.d,sens.b);sens normal 0 inverse 1
  StartDrawing(CanvasOutput(gad))
  DrawingMode(#PB_2DDrawing_Gradient)
  FrontColor(color_face)
  BackColor(color_ombre)
  If GadgetHeight(gad)< GadgetWidth(gad)
    LinearGradient(0,GadgetHeight(gad),0,0)
    If sens <> 0
     largPc.d = (GadgetWidth(gad)-GadgetWidth(gad)*Pc)/100
     Box(GadgetWidth(gad),0,largPc.d-2,GadgetWidth(gad) ,color_face) 
    Else  
     largPc.d = (GadgetWidth(gad)*Pc)/100
     Box(0,0,largPc.d,GadgetWidth(gad) ,color_face)
    EndIf
  Else
    LinearGradient(0,GadgetWidth(gad),GadgetWidth(gad),GadgetWidth(gad))
    If sens <> 0
     hautpc.d = (GadgetHeight(gad)-GadgetHeight(gad)*Pc)/100
     Box(0,GadgetHeight(gad),GadgetWidth(gad),hautpc.d,color_face)
    Else
     hautpc.d =(GadgetHeight(gad)*Pc)/100
     Box(0,0,GadgetWidth(gad),hautpc.d,color_face)
    EndIf
  EndIf  
  StopDrawing()
EndProcedure  

Procedure progbar3d(gad,X.d,Y.d,larg.d,haut.d,coulfond.d,cadre.b);pour cadre 1,si non 0
 If cadre = 1
   CanvasGadget(gad,X,Y,larg,haut, #PB_Canvas_Border)
 Else
   CanvasGadget(gad,X,Y,larg,haut)
 EndIf  
 StartDrawing(CanvasOutput(gad))
  DrawingMode(#PB_2DDrawing_Default)
  Box(0,0,larg,Haut,coulfond)
 StopDrawing()
EndProcedure 

Procedure demo()
  Static Pc1,Pc2,Pc3,Pc4
  pc1 = pc1 + 1  
  pc2 = pc2 + 2 
  pc3 = pc3 + 1 
  pc4 = pc4 + 4 
  avancepbar(1,$7E04E5,$44007E,Pc1,0)
  avancepbar(2,$CB9B79,$6F5C4F,Pc2,1)
  avancepbar(3,$A1E623,$5C6A42,Pc3,1)
  avancepbar(4,$1BF3FF,$167175,Pc4,0)
  If Pc1 = 100:progbar3d(1,10,20,200,25,$BEBEBE,1):pc1 = 0:EndIf
  If Pc2 = 100:progbar3d(2,10,80,280,25,$BEBEBE,0) :Pc2 = 0:EndIf
  If Pc3 = 100:progbar3d(3,50,120,25,100,$BEBEBE,0):Pc3 = 0:EndIf
  If Pc4 = 100:progbar3d(4,225,120,25,100,$BEBEBE,0):Pc4 = 0:EndIf
EndProcedure  
OpenWindow(0, 0, 0, 300, 250, "Progressbar1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
AddWindowTimer(0, 1, 100)
progbar3d(1,10,20,200,25,$BEBEBE,1)
;avancepbar(1,$7E04E5,$44007E,Pc1,0)
progbar3d(2,10,80,280,25,$BEBEBE,0) 
;avancepbar(2,$CB9B79,$6F5C4F,Pc2,1)
progbar3d(3,50,120,25,100,$BEBEBE,0)
;avancepbar(3,$A1E623,$5C6A42,Pc3,1)
progbar3d(4,225,120,25,100,$BEBEBE,0)
;avancepbar(4,$1BF3FF,$167175,Pc4,0)
BindEvent(#PB_Event_Timer,@demo())
Repeat
  Select WaitWindowEvent()
   Case #PB_Event_CloseWindow
    Break
 EndSelect
ForEver     
End    

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : ven. 27/avr./2018 15:40
par Micoute
Génial, beau travail, merci pour le partage.

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : ven. 27/avr./2018 15:59
par Kwai chang caine
Très jolies !!!!! et marche nickel :D
Ça va éclairer noir ma "musette d'outils" comme tu dis :lol:
Merci pour le partage 8)

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : ven. 27/avr./2018 16:47
par MLD
Merci les amis
Kcc un éclairage noir dans ta musette ? J'imagine même pas ce qu'il doit avoir la dedans :oops: :lol: que tu as oublié depuis longtemps :mrgreen:

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : ven. 27/avr./2018 19:20
par Kwai chang caine
:lol:

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : dim. 27/mai/2018 1:20
par omega
Très sympa
Merci pour le partage

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : dim. 01/juil./2018 17:30
par boby
@MLD si tu veux pouvoir réutiliser ton code dans d'autres projets, je te conseille fortement de l'utiliser sous forme de modules, comme ça tu n'as plus qu'à includefile et ça marche !

Code : Tout sélectionner

EnableExplicit
DeclareModule ProgressBar
  Declare create(X,Y,Width, Height, Colorbackground,ColorFront,ColorShadow,Border = #NUL,Direction=#NUL,Orientation=#NUL)
  Declare SetStat(*Gadget,Value)
  Declare GetStat(*Gadget)
  Declare GetHeight(*Gadget)
  Declare GetWidth(*Gadget)
EndDeclareModule
Module ProgressBar
  Structure ProgBar
    Gadget.l
    X.a
    Y.a
    Height.i
    Width.i
    ColorBackgroud.i 
    ColorFront.i
    ColorShadow.i
    Direction.a ;0 normal 1 a l'envers
    Orientation.a ;0 horizontal 1 vertical
    Stat.a
  EndStructure
  Procedure create(X,Y,Width, Height, Colorbackground,ColorFront,ColorShadow,Border = #NUL,Direction=#NUL,Orientation=#NUL) ; Border à 1 pour avoir la bordure (ou à #PB_Canvas_Border, constante qui vaut 1...)
    *ProgBar.ProgBar = AllocateMemory(SizeOf(ProgBar))
    *ProgBar\X = X
    *ProgBar\Y = Y
    *ProgBar\Width = Width
    *ProgBar\Height = Height
    *ProgBar\ColorBackgroud = Colorbackground
    *ProgBar\ColorFront = ColorFront
    *ProgBar\ColorShadow = ColorShadow
    *ProgBar\Direction = Direction
    *ProgBar\Orientation = Orientation
    *ProgBar\Gadget = CanvasGadget(#PB_Any,X,Y,Width,Height,Border)
    StartDrawing(CanvasOutput(*ProgBar\Gadget))
    Box(0,0,Width,Height,Colorbackground)
    StopDrawing()
    ProcedureReturn *ProgBar
  EndProcedure
  Procedure SetStat(*Gadget.ProgBar,Value)
    If Value > 100 : Value = 100 : EndIf
    *Gadget\Stat = Value
    StartDrawing(CanvasOutput(*Gadget\Gadget))
    Box(0,0,*Gadget\Width,*Gadget\Height,*Gadget\ColorBackgroud)
    DrawingMode(#PB_2DDrawing_Gradient)
    FrontColor(*Gadget\ColorFront)
    BackColor(*Gadget\ColorShadow)
    If *Gadget\Orientation
      LinearGradient(0,*Gadget\Width,*Gadget\Width,*Gadget\Width)
      If *Gadget\Direction
        Box(0,*Gadget\Height-(*Gadget\Height * *Gadget\Stat / 100),*Gadget\Width,*Gadget\Height,*Gadget\ColorFront)
      Else
        Box(0,0,*Gadget\Width,*Gadget\Height * *Gadget\Stat / 100,*Gadget\ColorFront)
      EndIf
    Else
      LinearGradient(0,*Gadget\Height,0,0)
      If *Gadget\Direction
        Box(*Gadget\Width-(*Gadget\Width * *Gadget\Stat / 100),0,*Gadget\Width,*Gadget\Height,*Gadget\ColorFront)
      Else
        Box(0,0,*Gadget\Width * *Gadget\Stat / 100,*Gadget\Height,*Gadget\ColorFront)
      EndIf
    EndIf
    StopDrawing()
  EndProcedure
  Procedure GetStat(*Gadget.ProgBar)
    ProcedureReturn *Gadget\Stat
  EndProcedure
  Procedure GetHeight(*Gadget.ProgBar)
    ProcedureReturn *Gadget\Height
  EndProcedure
  Procedure GetWidth(*Gadget.ProgBar)
    ProcedureReturn *Gadget\Height
  EndProcedure
EndModule

;======================Exemple=================
Global bare1, bare2, bare3, bare4

Procedure demo()
  ProgressBar::SetStat(bare1,ProgressBar::GetStat(bare1)+1)
  ProgressBar::SetStat(bare2,ProgressBar::GetStat(bare2)+2)
  ProgressBar::SetStat(bare3,ProgressBar::GetStat(bare3)+1)
  ProgressBar::SetStat(bare4,ProgressBar::GetStat(bare4)+4)
  If ProgressBar::GetStat(bare1) = 100 : ProgressBar::SetStat(bare1,0) : EndIf
  If ProgressBar::GetStat(bare2) = 100 : ProgressBar::SetStat(bare2,0) : EndIf
  If ProgressBar::GetStat(bare3) = 100 : ProgressBar::SetStat(bare3,0) : EndIf
  If ProgressBar::GetStat(bare4) = 100 : ProgressBar::SetStat(bare4,0) : EndIf
EndProcedure 
OpenWindow(0, 0, 0, 300, 250, "Progressbar1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
AddWindowTimer(0, 1, 100)
bare1 = ProgressBar::create(10,20,200,25,$BEBEBE,$7E04E5,$44007E,1,0,0)
bare2 = ProgressBar::create(10,80,280,25,$BEBEBE,$CB9B79,$6F5C4F,0,1)
bare3 = ProgressBar::create(50,120,25,100,$BEBEBE,$A1E623,$5C6A42,0,1,1)
bare4 = ProgressBar::create(225,120,25,100,$BEBEBE,$1BF3FF,$167175,0,0,1)
BindEvent(#PB_Event_Timer,@demo())
Repeat
  Select WaitWindowEvent()
   Case #PB_Event_CloseWindow
    End
EndSelect
ForEver 
Je n'ai mis que les fonctions très de base, mais c'est très simple d'en rajouter si besoin

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 7:08
par Micoute
Que son programme soit dans un module ou pas ne change rien à son fonctionnement, mais l'avantage des modules est de créer des espace de noms, ce qui permet d'avoir exactement les mêmes noms de procédures sans risques de confusions.

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 8:55
par boby
Que son programme soit dans un module ne change rien à son fonctionnement, mais ça le rend bien plus simple et pratique à passer de projet en projet sans venir "polluer" le code, de plus le debug est lui aussi bien plus facile.

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 10:13
par MLD
@boby

Bonjour
oui c'est aussi une solution.
Merci a toi
Michel

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 10:48
par Micoute
Excuse-moi boby si tu as pensé que je voulais créer une polémique et j'en suis tout confus.

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 11:53
par Ar-S
Merci MLD et merci boby pour le modulisation :)

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 14:17
par MLD
Heu Ar-S
modulisation ?? je n'est pas trouvé dans le dico :roll: :lol: :lol: Le terme approprié ne serait pas encapsulation; ??? :oops: :lol: :lol:

Re: Un système de ProgresseBarre pour votre musette d'outils

Publié : lun. 02/juil./2018 17:15
par boby
@Micoute y'a ni polémique, ni excuse à donner, je donne simplement mon avis sur pourquoi je conseil l'utilisation de modules. Je n'ai pas la science infuse c'est pourquoi je viens partager sur des forums, ça permet d'avoir l'avis / visions d'autres personnes (comme toi), c'est ça qui permet à tout le monde de progresser (toujours selon mon avis). Mais la, ça s'éloigne un peut trop du sujet initial de ce poste...