MODULE Colorful Progressbar [ALL OS!]

Share your advanced PureBasic knowledge/code with the community.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

MODULE Colorful Progressbar [ALL OS!]

Post by Mijikai »

MODULE Colorful Progressbar [ALL OS!] :)

The bloat-free, simple yet fully-customizable Progressbar!

Image

A clean, easy & practical solution that does not require 3rd party modules,
extensive code or multiple Gadgets.

Module:

Code: Select all

;By Mijikai
;PBAR (Progressbar) module
;Version: alpha 4
;Tested on Win10 x64
;PB v.5.60


DeclareModule PBAR
  
  Structure PBAR_DRAW_STRUCT
    Type.b
    State.i
    Percent.i
    Width.i
    Height.i
    Offset.i
    BackColor.l
    FrontColor.l
    FxColor.l
    Custom.i
  EndStructure
  
  Declare.i Create(X.i,Y.i,Width.i,Height.i,Minimal.i,Maximal.i,BackColor.l,FrontColor.l,FxColor.l,Vertical.b)
  Declare.i Set(Gadget.i,State.i)
  Declare.i Get(Gadget.i)
  Declare.i Percent(Gadget.i)
  Declare.i SetColor(Gadget.i,Color.l,Flag.b)
  Declare.i SetColors(Gadget.i,BackColor.l,FrontColor.l,FxColor.l)
  Declare.i SetStateCallback(Gadget.i,Function.i,State.i,Custom.i)
  Declare.i SetDrawCallback(Gadget.i,Function.i,Custom.i)
  Declare.i Free(Gadget.i)
EndDeclareModule

Module PBAR

  Structure PBAR_STRUCT
    Minimal.i
    Maximal.i
    Tick.f
    Factor.f
    Percent.i
    State.i
    Drawing.PBAR_DRAW_STRUCT
    CallbackDraw.i
    CallbackState.i
    CallState.i
    Custom.i
  EndStructure
  
  #PBAR_GRADIENT_FACTOR = 0.8
  #PBAR_BORDER_COLOR = $808080
  
  Prototype.i PBAR_CALLBACK_DRAW(Gadget.i,*Drawing.PBAR_DRAW_STRUCT)
  
  Prototype.i PBAR_CALLBACK_STATE(Gadget.i,State.i,Percent,Custom.i)
  
  Procedure.i Percent(Gadget.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx
      ProcedureReturn *ProgressBarEx\Percent
    EndIf
  EndProcedure
  
  Procedure.i Get(Gadget.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx
      ProcedureReturn *ProgressBarEx\State
    EndIf
  EndProcedure
  
  Procedure.i Set(Gadget.i,State.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    Protected BackState.i
    Protected *CallDraw.PBAR_CALLBACK_DRAW
    Protected *CallState.PBAR_CALLBACK_STATE
    If State > -1 And *ProgressBarEx
      With *ProgressBarEx
        If \Maximal < State
          State = \Maximal
        EndIf
        BackState = State
        If \Minimal
          If State > \Minimal
            State - \Minimal
          Else
            State = #Null
          EndIf
        EndIf 
        If StartDrawing(CanvasOutput(Gadget))
          \Percent = \Factor * State
          \Drawing\Offset = \Tick * State
          DrawingMode(#PB_2DDrawing_Default)
          Box(#Null,#Null,GadgetWidth(Gadget),GadgetHeight(Gadget),\Drawing\BackColor)
          If \CallbackDraw
            *CallDraw = \CallbackDraw
            \Drawing\State = BackState
            \Drawing\Percent = \Percent
            *CallDraw(Gadget,@\Drawing)
          Else
            DrawingMode(#PB_2DDrawing_Gradient)
            FrontColor(\Drawing\FrontColor)
            BackColor(\Drawing\FxColor)
            If \Drawing\Type
              LinearGradient(\Drawing\Width/#PBAR_GRADIENT_FACTOR,\Drawing\Offset,#Null,\Drawing\Offset)   
              Box(#Null,#Null,\Drawing\Width,\Drawing\Offset,\Drawing\FrontColor)
            Else
              LinearGradient(\Drawing\Offset,\Drawing\Height/#PBAR_GRADIENT_FACTOR,\Drawing\Offset,#Null)   
              Box(#Null,#Null,\Drawing\Offset,\Drawing\Height,\Drawing\FrontColor)
            EndIf
          EndIf
          DrawingMode(#PB_2DDrawing_Outlined)
          Box(#Null,#Null,GadgetWidth(Gadget),GadgetHeight(Gadget),#PBAR_BORDER_COLOR)
          StopDrawing()
          \State = BackState
          If \CallbackState
            If \State = \CallState
              *CallState = \CallbackState
              If *CallState(Gadget,\State,Percent,\Custom)
                \CallbackState = #Null
              EndIf
            EndIf
          EndIf 
          ResizeGadget(Gadget,#PB_Ignore,#PB_Ignore,#PB_Ignore,#PB_Ignore)
          ProcedureReturn #True 
        EndIf
      EndWith
    EndIf
  EndProcedure
  
  Procedure.i Create(X.i,Y.i,Width.i,Height.i,Minimal.i,Maximal.i,BackColor.l,FrontColor.l,FxColor.l,Vertical.b)
    Protected *ProgressBarEx.PBAR_STRUCT
    Protected Gadget.i
    If Minimal > -1 And Minimal < Maximal
      *ProgressBarEx = AllocateMemory(SizeOf(PBAR_STRUCT))
      If *ProgressBarEx
        With *ProgressBarEx
          \Drawing\BackColor = BackColor
          \Drawing\FrontColor = FrontColor
          \Drawing\FxColor = FxColor
          Gadget = CanvasGadget(#PB_Any,X,Y,Width,Height)
          If Gadget
            \Drawing\Type = Vertical
            \Minimal = Minimal
            \Maximal = Maximal
            \Factor = \Maximal - \Minimal
            If Vertical
              \Tick = Height / \Factor
            Else
              \Tick = Width / \Factor
            EndIf
            \Factor = 100 / \Factor
            \Drawing\Width = Width
            \Drawing\Height = Height
            SetGadgetData(Gadget,*ProgressBarEx)
            If Set(Gadget,0)
              ProcedureReturn Gadget
            EndIf
            FreeGadget(Gadget)
          EndIf
        EndWith
        FreeMemory(*ProgressBarEx)
      EndIf
    EndIf
  EndProcedure
  
  Procedure.i Free(Gadget.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx
      FreeMemory(*ProgressBarEx)
    EndIf
    FreeGadget(Gadget)
  EndProcedure
  
  Procedure.i SetColors(Gadget.i,BackColor.l,FrontColor.l,FxColor.l)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx
      With *ProgressBarEx
        \Drawing\BackColor = BackColor
        \Drawing\FrontColor = FrontColor
        \Drawing\FxColor = FxColor
        Set(Gadget,\State)
      EndWith
    EndIf
  EndProcedure
  
  Procedure.i SetColor(Gadget.i,Color.l,Flag.b)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx
      With *ProgressBarEx
        Select Flag
          Case 1:\Drawing\FrontColor = Color
          Case 2:\Drawing\FxColor = Color
          Default:\Drawing\BackColor = Color
        EndSelect
        Set(Gadget,\State)
      EndWith
    EndIf
  EndProcedure
  
  Procedure.i SetStateCallback(Gadget.i,Function.i,State.i,Custom.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx And Function
      *ProgressBarEx\CallbackState = Function
      *ProgressBarEx\CallState = State
      *ProgressBarEx\Custom = Custom
      ProcedureReturn #True
    EndIf
  EndProcedure
  
  Procedure.i SetDrawCallback(Gadget.i,Function.i,Custom.i)
    Protected *ProgressBarEx.PBAR_STRUCT = GetGadgetData(Gadget)
    If *ProgressBarEx And Function
      *ProgressBarEx\CallbackDraw = Function
      *ProgressBarEx\Drawing\Custom = Custom
      ProcedureReturn #True
    EndIf
  EndProcedure
  
EndModule
Example:

Code: Select all

Procedure.i PBAR_State(Gadget.i,State.i,Percent.i,Custom.i)
  MessageRequester("CallbackState!","State: " + Str(State))
  ProcedureReturn #True;#True -> Callback gets only called once!
EndProcedure

Procedure.i PBAR_Draw(Gadget.i,*Drawing.PBAR::PBAR_DRAW_STRUCT)
  Protected Offset.i, Count.i
  For Offset = 0 To *Drawing\Offset - 1
    If Count = ImageWidth(*Drawing\Custom) - 1
      Count = 0
    EndIf
    Count + 1
    If GrabImage(*Drawing\Custom,66,Count,0,1,ImageHeight(*Drawing\Custom))
      DrawAlphaImage(ImageID(66),Offset,-5)
      FreeImage(66)
    EndIf
  Next
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawText(150,2, Str(*Drawing\Percent) + "%")
  ;*Drawing\Offset -> progress relative to the progressbar size (width or height see *Drawing\Type)
  ;*Drawing\Type -> 0 = horizontal / 1 = vertical 
EndProcedure

UsePNGImageDecoder()

If OpenWindow(0,0,0,300,250,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  Bar1 = PBAR::Create(10,10,20,200,50,150,#Gray,#Green,#White,#True)
  Bar2 = PBAR::Create(40,40,200,20,0,200,$58260E,$C9A239,$C9FB00,#False)
  Bar3 = PBAR::Create(40,100,200,30,0,100,$58260D,$CB7448,$FFF7C0,#False)
  AddWindowTimer(0,0,10)
  Tile = CatchImage(#PB_Any,?BarTile)
  If Bar1 And Bar2 And Bar3 And Tile: i = 50  
    PBAR::SetStateCallback(Bar1,@PBAR_State(),100,#Null)
    PBAR::SetDrawCallback(Bar2,@PBAR_Draw(),Tile)
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Timer
          If PBAR::Get(Bar1) > 100
            i = 50
          EndIf
          i + 1
          SetWindowTitle(0,"Bar1: " + Str(PBAR::Percent(Bar1)) + "% - Bar2: " + Str(PBAR::Percent(Bar2)) + "%")
          PBAR::Set(Bar1,i)
          PBAR::Set(Bar2,i)
          PBAR::Set(Bar3,100 - i)
          If Mod(i,10)
            PBAR::SetColor(Bar3,RGB(i * 5,0,100),0)
          EndIf
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
    PBAR::Free(Bar1)
    PBAR::Free(Bar2)
    PBAR::Free(Bar3)
  EndIf
EndIf

DataSection
  BarTile:
  ;{File: BarTile.png - Size: 4196 Bytes
  !dw 05089h, 0474Eh, 00A0Dh, 00A1Ah, 00000h, 00D00h, 04849h, 05244h, 00000h, 02000h, 00000h, 02000h, 00608h, 00000h, 07300h, 07A7Ah
  !dw 000F4h, 01000h, 0492Bh, 04144h, 05854h, 001C3h, 01020h, 0EFDFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00002h, 0EFB5h, 0FFEEh
  !dw 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 0FFEEh
  !dw 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 002FFh, 0E000h, 01275h
  !dw 0B500h, 0EEEFh, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h
  !dw 0B500h, 0EEEFh, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00002h, 08B20h
  !dw 000EEh, 075E0h, 00012h, 0EFB5h, 0FFEEh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h, 0114Bh
  !dw 00012h, 00000h, 00000h, 0EFB5h, 0FFEEh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 075E0h, 00212h, 00000h
  !dw 00000h, 02000h, 0EE8Bh, 0E000h, 01275h, 0B500h, 0EEEFh, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 04B00h, 01211h, 09601h
  !dw 00165h, 04B00h, 01211h, 00000h, 00000h, 0B500h, 0EEEFh, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 0E000h, 01275h, 02000h, 0EE8Bh, 00002h
  !dw 0114Bh, 00012h, 00000h, 00000h, 08B20h, 000EEh, 075E0h, 00012h, 0EFB5h, 0FFEEh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h, 0114Bh, 00112h, 06596h, 00001h
  !dw 00000h, 00100h, 06596h, 00001h, 0114Bh, 00012h, 00000h, 00000h, 0EFB5h, 0FFEEh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 075E0h, 00012h, 08B20h, 000EEh, 00000h, 00100h
  !dw 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 0E000h, 01275h, 02000h, 0EE8Bh, 04B00h, 01211h, 09601h, 00165h
  !dw 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h
  !dw 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 0E000h, 01275h, 02000h, 0EE8Bh, 00000h, 00000h, 04B00h, 01211h
  !dw 00001h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h, 075E0h, 00012h, 08B20h, 000EEh, 0114Bh
  !dw 00112h, 06596h, 0FF01h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h, 0114Bh, 00112h, 06596h, 00001h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h, 0114Bh
  !dw 00112h, 06596h, 0FF01h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 075E0h, 00012h, 08B20h, 000EEh, 00000h, 00000h, 0114Bh, 00112h, 06596h
  !dw 00101h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 0E000h, 01275h, 02000h
  !dw 0EE8Bh, 04B00h, 01211h, 0B500h, 0EEEFh, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h
  !dw 00000h, 04B00h, 01211h, 0B500h, 0EEEFh, 0E000h, 01275h, 02000h, 0EE8Bh, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h, 00000h
  !dw 00000h, 00001h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh, 0EFB5h, 000EEh, 00000h, 00000h
  !dw 075E0h, 00012h, 08B20h, 000EEh, 00000h, 00000h, 0114Bh, 00112h, 06596h, 00001h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah, 000FFh
  !dw 0EFB5h, 000EEh, 00000h, 00000h, 075E0h, 00012h, 08B20h, 000EEh, 00000h, 00000h, 0114Bh, 00112h, 06596h, 00001h, 00000h, 00000h
  !dw 00000h, 00100h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 0B500h, 0EEEFh
  !dw 00000h, 00000h, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 06AFFh, 0FF9Bh, 0B500h, 0EEEFh, 00000h, 00000h, 00000h, 00000h, 04B00h, 01211h, 09601h, 00165h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 0FF00h, 09B6Ah
  !dw 0FFFFh, 08A1Fh, 0FFEDh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 0FF00h, 09B6Ah, 0FFFFh, 08A1Fh, 0FFEDh, 09B6Ah, 000FFh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 06AFFh, 0FF9Bh, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h
  !dw 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 00000h, 05692h, 03D1Eh, 00868h, 085BCh, 00000h, 00000h, 04549h, 0444Eh
  !dw 042AEh, 08260h
  ;}
EndDataSection
Have fun & share improvements!
Last edited by Mijikai on Tue Aug 22, 2017 9:01 pm, edited 15 times in total.
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5353
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by Kwai chang caine »

Waouuuhh very nice !!! A true Progress3dBar like crosoft know do :shock:
And she works very nice
Thanks a lot foo sharing 8)
ImageThe happiness is a road...
Not a destination
User avatar
Andre
PureBasic Team
PureBasic Team
Posts: 2058
Joined: Fri Apr 25, 2003 6:14 pm
Location: Germany (Saxony, Deutscheinsiedel)
Contact:

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by Andre »

Nice, thank you.
Bye,
...André
(PureBasicTeam::Docs & Support - PureArea.net | Order:: PureBasic | PureVisionXP)
User avatar
OldSkoolGamer
Enthusiast
Enthusiast
Posts: 150
Joined: Mon Dec 15, 2008 11:15 pm
Location: Nashville, TN
Contact:

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by OldSkoolGamer »

Nice code you have there. I will hang onto this and surely will use it in the future. Thanks for sharing. 8)
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by Mijikai »

Thank you all :)

I just updated the code:
- added border
- improved drawing (gradient background got removed)
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by davido »

@Mijikai,
Looks great on the PC.
Tried to get it working on the Mac.
It works of-a-fashion by simply removing all the OS specific lines of code. Just needs a mouse-click from time-to-time to keep it going.
Thank you for sharing. :D
DE AA EB
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by Mijikai »

davido wrote:...Just needs a mouse-click from time-to-time to keep it going.
....
A timed 'WaitWindowEvent(100)' could be a solution (if your code allows that).
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: MODULE Colorful Progressbar (easy to adjust for all OS)

Post by davido »

@Mijikai,
I hadn't thought of that! :oops:
Thank you for the tip. I'll try it later on.
DE AA EB
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: MODULE Colorful Progressbar [ALL OS!]

Post by Mijikai »

Updated the code :)
Prograssbar should now support all OS!
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: MODULE Colorful Progressbar [ALL OS!]

Post by Mijikai »

I further improved the code :)

Update (alpha 3):
- added new function Percent()
- added Callbacks for drawing & ProgressbarState
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: MODULE Colorful Progressbar [ALL OS!]

Post by Mijikai »

Update (alpha 4):
- improved callbacks
- custom drawing example changed
Post Reply