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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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    
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Génial, beau travail, merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message par Kwai chang caine »

:lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

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

Message par omega »

Très sympa
Merci pour le partage
Win7 (x64) 64 bits Pb 5.72
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

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

Message 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
Dernière modification par boby le lun. 09/juil./2018 17:08, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

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

Message 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.
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message par MLD »

@boby

Bonjour
oui c'est aussi une solution.
Merci a toi
Michel
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

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

Message par Micoute »

Excuse-moi boby si tu as pensé que je voulais créer une polémique et j'en suis tout confus.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

Merci MLD et merci boby pour le modulisation :)
~~~~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
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

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

Message 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:
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

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

Message 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...
Répondre