PureBasic

Forums PureBasic
Nous sommes le Lun 24/Juin/2019 18:42

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 
Auteur Message
 Sujet du message: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Ven 27/Avr/2018 15:32 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 880
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:
;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   


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Ven 27/Avr/2018 15:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2137
Localisation: 50200 Coutances
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Ven 27/Avr/2018 15:59 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6623
Localisation: Isere
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Ven 27/Avr/2018 16:47 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 880
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:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Ven 27/Avr/2018 19:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6623
Localisation: Isere
:lol:

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Dim 27/Mai/2018 1:20 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 26/Nov/2011 13:04
Messages: 463
Très sympa
Merci pour le partage

_________________
Win7 (x86) 32 bits Pb 5.70


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Dim 01/Juil/2018 17:30 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
@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:
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 édition par boby le Lun 09/Juil/2018 17:08, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 7:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2137
Localisation: 50200 Coutances
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 8:55 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 10:13 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 880
@boby

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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 10:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2137
Localisation: 50200 Coutances
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 GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 11:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8668
Merci MLD et merci boby pour le modulisation :)

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 14:17 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 880
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:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Un système de ProgresseBarre pour votre musette d'outils
MessagePosté: Lun 02/Juil/2018 17:15 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 261
@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...


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 14 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye