You may use images.
Code: Select all
Enumeration
#Window_0
EndEnumeration
Enumeration
#ProgressBar_0
#ProgressBar_1
#Text_0
EndEnumeration
;
Procedure ProcTextProgressBarGadget(hwnd, msg, wParam, lParam)
Protected OldProc.l, ImgID.l, ImgID2.l, hdcOut.l, hdcIn.l, ps.PAINTSTRUCT, GadgetNumber.l
Protected Text.s, BarColor.l, Progression.d, BackColor.l, ProgWidth.d, TextColor2.l
OldProc = GetProp_(hwnd, "OldProc")
TextColor = GetProp_(hwnd, "TextColor")
TextColor2 = GetProp_(hwnd, "TextColor2")
BackColor = GetProp_(hwnd, "BackColor")
BarColor = GetProp_(hwnd, "BarColor")
Select msg
Case #WM_PAINT
GadgetNumber = GetDlgCtrlID_(hwnd)
Progression = (GetGadgetState(GadgetNumber) - GetGadgetAttribute(GadgetNumber, #PB_ProgressBar_Minimum)) / (GetGadgetAttribute(GadgetNumber, #PB_ProgressBar_Maximum) - GetGadgetAttribute(GadgetNumber, #PB_ProgressBar_Minimum))
ProgWidth = GadgetWidth(GadgetNumber)* Progression
Text = StrD(Progression * 100, 0) + "%"
BeginPaint_(hwnd, @ps) ;>
hdcOut = ps\hdc
ImgID2 = CreateImage(#PB_Any, GadgetWidth(GadgetNumber), GadgetHeight(GadgetNumber), #PB_Image_DisplayFormat)
StartDrawing(ImageOutput(ImgID2))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(GetStockObject_(#DEFAULT_GUI_FONT))
Box(0, 0, GadgetWidth(GadgetNumber), GadgetHeight(GadgetNumber), BarColor)
FrontColor(TextColor)
DrawText(GadgetWidth(GadgetNumber) / 2 - 0.5 * TextWidth(Text), GadgetHeight(GadgetNumber) / 2 - 0.5 * TextHeight(Text), Text)
StopDrawing()
ImgID = CreateImage(#PB_Any, GadgetWidth(GadgetNumber), GadgetHeight(GadgetNumber), #PB_Image_DisplayFormat)
hdcIn = StartDrawing(ImageOutput(ImgID))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(GetStockObject_(#DEFAULT_GUI_FONT))
Box(0, 0, GadgetWidth(GadgetNumber), GadgetHeight(GadgetNumber), BackColor)
FrontColor(TextColor2)
DrawText(GadgetWidth(GadgetNumber) / 2 - 0.5 * TextWidth(Text), GadgetHeight(GadgetNumber) / 2 - 0.5 * TextHeight(Text), Text)
If ProgWidth > 0
ImgTmpID = GrabImage(ImgID2 , #PB_Any, 0, 0, ProgWidth, GadgetHeight(GadgetNumber))
If ImgTmpID
DrawImage(ImageID(ImgTmpID), 0, 0)
FreeImage(ImgTmpID)
EndIf
EndIf
BitBlt_(hdcOut, 0, 0, GadgetWidth(GadgetNumber), GadgetHeight(GadgetNumber), hdcIn, 0, 0, #SRCCOPY)
StopDrawing()
EndPaint_(hwnd, ps) ;<
FreeImage(ImgID)
FreeImage(ImgID2)
ProcedureReturn #Null
Case #WM_NCDESTROY
RemoveProp_(hwnd, "OldProc")
RemoveProp_(hwnd, "TextColor")
RemoveProp_(hwnd, "TextColor2")
RemoveProp_(hwnd, "BackColor")
RemoveProp_(hwnd, "BarColor")
EndSelect
ProcedureReturn CallWindowProc_(OldProc, hwnd, msg, wParam, lParam)
EndProcedure
Procedure CreateTextProgressBarGadget(GadgetNumber.l, X.l, Y.l, width.l, Height.l, Minimum.l, Maximum.l, FirstTextColor.l = #PB_Ignore, SecondTextColor.l = #PB_Ignore, BarColor.l = #PB_Ignore, BackColor.l = #PB_Ignore)
Protected ImgID.l, ImgID2.l
If FirstTextColor = #PB_Ignore
FirstTextColor = GetSysColor_(#COLOR_WINDOWTEXT)
EndIf
If SecondTextColor = #PB_Ignore
SecondTextColor = GetSysColor_(#COLOR_HIGHLIGHTTEXT)
EndIf
If BackColor = #PB_Ignore
BackColor = GetSysColor_(#COLOR_BTNFACE)
EndIf
If BarColor = #PB_Ignore
BarColor = GetSysColor_(#COLOR_HIGHLIGHT)
EndIf
ProgressBarGadget(GadgetNumber, X, Y, width, Height, Minimum, Maximum)
SetProp_(GadgetID(GadgetNumber), "BackColor", BackColor)
SetProp_(GadgetID(GadgetNumber), "BarColor", BarColor)
SetProp_(GadgetID(GadgetNumber), "TextColor", SecondTextColor)
SetProp_(GadgetID(GadgetNumber), "TextColor2", FirstTextColor)
SetProp_(GadgetID(GadgetNumber), "OldProc", SetWindowLong_(GadgetID(GadgetNumber), #GWL_WNDPROC, @ProcTextProgressBarGadget()))
EndProcedure
;
; ----------- T E S T ----------
;
If OpenWindow(#Window_0, 591, 251, 251, 110, "Text in progressbar", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(#Window_0))
CreateTextProgressBarGadget(#ProgressBar_0, 5, 10, 240, 30, 0, 2000)
CreateTextProgressBarGadget(#ProgressBar_1, 5, 50, 200, 30, 0, 1000, #Blue, #Red, #White, #Green)
TextGadget(#Text_0, 5, 90, 245, 20, "", #PB_Text_Center)
EndIf
EndIf
;
cc=0
Repeat
Event = WaitWindowEvent(1)
If cc<2000:cc+2
SetGadgetState(#ProgressBar_0, cc)
SetGadgetState(#ProgressBar_1, cc)
SetGadgetText(#Text_0, Str(cc) + " / 2000")
EndIf
Select Event
Case #PB_Event_CloseWindow
CloseWindow(#Window_0)
Break
EndSelect
ForEver
There are a lot of colored progressbar codes available in the forum.