PureCOLOR library : coloring gadgets (and much more)

All PureFORM, JaPBe, Libs and useful code maintained by gnozal

Moderator: gnozal

gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureForm,PureColor = goofy text?

Post by gnozal »

jassing wrote:Image
Notice the "blurry" text? It gets blurry as soon as the colour of the object beneath changes.
How can I avoid it?
#PureCOLOR_DontSetBackColor uses #HOLLOW_BRUSH to simulate a transparent background for static gadgets, so this is the expected result.
You may redraw the gadget, like this :

Code: Select all

pWindow = OpenWindow(#PB_Any,0,0,10,10,"",#PB_Window_Invisible)
hWindow = OpenWindow(#PB_Any, 450, 200, 352, 62, "Having Fun", #PB_Window_SystemMenu,WindowID(pWindow))

hprog1 = ProgressBarGadget(#PB_Any, 6, 1, 340, 25, 0, 100, #PB_ProgressBar_Smooth)
hText1 = TextGadget(#PB_Any, 7, 3, 340, 20, "0%", #PB_Text_Center|#SS_CENTERIMAGE)

hProg2 = ProgressBarGadget(#PB_Any, 6, 31, 340, 25, 0, 100, #PB_ProgressBar_Smooth)
hText2 = TextGadget(#PB_Any, 5, 34, 340, 20, "0%", #PB_Text_Center|#SS_CENTERIMAGE)
SetWindowLongPtr_(GadgetID(hProg2), #GWL_STYLE, GetWindowLongPtr_(GadgetID(hProg2), #GWL_STYLE) | #WS_CLIPSIBLINGS)


SetGadgetFont(hText1, LoadFont(#PB_Any, "Microsoft Sans Serif", 8, #PB_Font_Bold|#PB_Font_HighQuality))
SetGadgetFont(hText2, LoadFont(#PB_Any, "Microsoft Sans Serif", 8, #PB_Font_Bold|#PB_Font_HighQuality))

PureCOLOR_SetGadgetColor(hText1, $FFFFFF, #PureCOLOR_DontSetBackColor)
PureCOLOR_SetGadgetColor(hText2, $FFFFFF, #PureCOLOR_DontSetBackColor)

For i = 0 To 100
  SetGadgetState(hProg2, i)
  RedrawWindow_(GadgetID(hProg2),0,0,#RDW_ERASE|#RDW_INVALIDATE) ;<------------ force redraw
  While WindowEvent() : Wend
  SetGadgetText(hText2, Str(i)+"%")
  While WindowEvent() : Wend
  Delay(100)
Next


Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
        Break
  EndSelect
ForEver
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
jassing
Addict
Addict
Posts: 1745
Joined: Wed Feb 17, 2010 12:00 am

Re: PureCOLOR library : coloring gadgets (and much more)

Post by jassing »

Thanks! but...

That actually made it worse, lots of "flashing" -- and the progbar gets changed from blue to black.
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by gnozal »

You may use images.
An example :

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.
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
jassing
Addict
Addict
Posts: 1745
Joined: Wed Feb 17, 2010 12:00 am

Re: PureCOLOR library : coloring gadgets (and much more)

Post by jassing »

Slick! Thanks for the ideas....
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4747
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: PureFORM 1.99 (yet another FORM designer)

Post by Fangbeast »

When colouring PanelGadget, my tab icons do not get displayed.

Is there anything I can do about this?

**EDIT** Sorry, wrong forum, should have been for PureCOLOR
Last edited by Fangbeast on Sun Apr 01, 2012 8:58 pm, edited 1 time in total.
Amateur Radio, D-STAR/VK3HAF
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureFORM 1.99 (yet another FORM designer)

Post by gnozal »

Fangbeast wrote:When colouring PanelGadget, my tab icons do not get displayed.
Is there anything I can do about this?
Unfortunately no.
PureCOLOR is quite old ; the library processes the #WM_DRAWITEM message to draw the text and at the time PB didn't support icons !
Something to add on the todo list I guess...
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4747
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: PureFORM 1.99 (yet another FORM designer)

Post by Fangbeast »

gnozal wrote:
Fangbeast wrote:When colouring PanelGadget, my tab icons do not get displayed.
Is there anything I can do about this?
Unfortunately no.
PureCOLOR is quite old ; the library processes the #WM_DRAWITEM message to draw the text and at the time PB didn't support icons !
Something to add on the todo list I guess...
Sorry for complicating your life Gnozal. I think mine is quite complicated at the moment too.

Should be outside gardening and not coding.
Amateur Radio, D-STAR/VK3HAF
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureFORM 1.99 (yet another FORM designer)

Post by gnozal »

Fangbeast wrote:Sorry for complicating your life Gnozal. I think mine is quite complicated at the moment too.
No problem ;)
I will update the library tomorrow...
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by gnozal »

Update (V16.11 for PB4.6x)

Changes :
- fixed : PureCOLOR should now support icons in panelgadget tabs
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4747
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Re: PureCOLOR library : coloring gadgets (and much more)

Post by Fangbeast »

Thanks for the hard work Gnozal, i'm happy to report that it works well.

/me bows
Amateur Radio, D-STAR/VK3HAF
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by IdeasVacuum »

Hi gnozal, a curious thing with ListIconGadgets (PB4.61).

If a ListIcon has alternate colour rows set with PureCOLOR_SetGadgetColorEx, PureCOLOR_GetCellColor and PureCOLOR_ClearCellColor do not work, though PureCOLOR_SetCellColor works fine.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by gnozal »

IdeasVacuum wrote:If a ListIcon has alternate colour rows set with PureCOLOR_SetGadgetColorEx, PureCOLOR_GetCellColor and PureCOLOR_ClearCellColor do not work, though PureCOLOR_SetCellColor works fine.
It's the expected behavior (help file updated).
PureCOLOR_GetCellColor() and PureCOLOR_ClearCellColor() only work for colors set with PureCOLOR_SetCellColor().
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
IdeasVacuum
Always Here
Always Here
Posts: 6425
Joined: Fri Oct 23, 2009 2:33 am
Location: Wales, UK
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by IdeasVacuum »

Ah, thanks gnozal. Of course, we should know what colours were defined for alternate rows and so it is just a matter of testing if a row concerned is odd or even. If anyone else needs this:

Code: Select all

Procedure.b IsOddInt(iNum.i)
;---------------------------

Protected bIsOdd.b = #True

     If Not (iNum % 2) : bIsOdd = #False : EndIf

     ProcedureReturn bIsOdd

EndProcedure
Then:

Code: Select all

If(IsOddInt(iRow))

       PureCOLOR_SetCellColor(iList,iRow,iCol,iFrontColour,iRowColourOdd)
Else
       PureCOLOR_SetCellColor(iList,iRow,iCol,iFrontColour,iRowColourEven)
EndIf
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
gnozal
PureBasic Expert
PureBasic Expert
Posts: 4229
Joined: Sat Apr 26, 2003 8:27 am
Location: Strasbourg / France
Contact:

Re: PureCOLOR library : coloring gadgets (and much more)

Post by gnozal »

Library updated for PB5.1x
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Andi
User
User
Posts: 21
Joined: Fri Sep 12, 2008 2:43 pm
Location: Berlin

Re: PureCOLOR library : coloring gadgets (and much more)

Post by Andi »

Hi Gnozal, I downloaded the zip-file from your site, but the version-number of the installer.exe is 500 and it's dated November last year. Is it really the version for PB 5.11?

OOPs, I just discovered, that there's a link to the PB-5.1-update right at the beginning of this thread.
Post Reply