TrackBarGadget Backcolor!

Just starting out? Need help? Post your questions and find answers here.
funnyguy
User
User
Posts: 69
Joined: Mon Jun 23, 2008 10:57 pm

TrackBarGadget Backcolor!

Post by funnyguy »

I created a TrackBarGadget in my Red colored window. But the trackbar gadget stands out coz its back color has not changed.
Sparkie
PureBatMan Forever
PureBatMan Forever
Posts: 2307
Joined: Tue Feb 10, 2004 3:07 am
Location: Ohio, USA

Post by Sparkie »

Solution for Windows only.

Code: Select all

Procedure WinCallback(hwnd, msg, wParam, lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select msg 
    Case #WM_CTLCOLORSTATIC 
      result = GetGadgetData(1)
  EndSelect  
  ProcedureReturn result 
EndProcedure 

If OpenWindow(0, 0, 0, 320, 240, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
  SetWindowColor(0, #Red)
  TrackBarGadget(1, 10, 10, 300, 30, 0, 25, #PB_TrackBar_Ticks) 
  winColor = GetWindowColor(0)
  If winColor <> -1
    hBrush = CreateSolidBrush_(winColor)
    If hBrush
      SetGadgetData(1, hBrush)
      SetWindowCallback(@WinCallback()) 
    EndIf
  EndIf
  Repeat
    event = WaitWindowEvent()
    
  Until event = #PB_Event_CloseWindow
  If hBrush
    DeleteObject_(hBrush)
  EndIf
EndIf

What goes around comes around.

PB 5.21 LTS (x86) - Windows 8.1
BarryG
Addict
Addict
Posts: 4219
Joined: Thu Apr 18, 2019 8:17 am

Re: TrackBarGadget Backcolor!

Post by BarryG »

Just tried this code today because I needed it, but it stops TextGadgets being colored. Anyone know how to fix, please? Thanks. :)

Code: Select all

Procedure WinCallback(hwnd, msg, wParam, lParam) 
  result = #PB_ProcessPureBasicEvents 
  Select msg 
    Case #WM_CTLCOLORSTATIC 
      result = GetGadgetData(1)
  EndSelect  
  ProcedureReturn result 
EndProcedure 

If OpenWindow(0, 0, 0, 320, 100, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
  TrackBarGadget(1, 10, 10, 300, 30, 0, 25, #PB_TrackBar_Ticks)
  TextGadget(2, 10, 50, 300, 25, "This background isn't red")
  col = #Red
  hBrush = CreateSolidBrush_(col)
  If hBrush
    SetWindowColor(0, col)
    SetGadgetData(1, hBrush)
    SetWindowCallback(@WinCallback())
    SetGadgetColor(2, #PB_Gadget_BackColor, col)
  EndIf
  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
  If hBrush
    DeleteObject_(hBrush)
  EndIf
EndIf
User avatar
JHPJHP
Addict
Addict
Posts: 2267
Joined: Sat Oct 09, 2010 3:47 am

Re: TrackBarGadget Backcolor!

Post by JHPJHP »

Hi BarryG,

Limit the Callback to the specific Gadget.

Code: Select all

Procedure WinCallback(hWnd, Msg, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents

  Select Msg
    Case #WM_CTLCOLORSTATIC
      Select lParam
        Case GadgetID(1)
          Result = GetGadgetData(1)
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

If you're not investing in yourself, you're falling behind.

My PureBasic StuffFREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
User avatar
ChrisR
Addict
Addict
Posts: 1484
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: TrackBarGadget Backcolor!

Post by ChrisR »

Or SetBkMode Transparent

Code: Select all

Procedure WinCallback(hWnd, Msg, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Msg
    Case #WM_CTLCOLORSTATIC
      SetBkMode_(wParam, #TRANSPARENT)
      ProcedureReturn GetGadgetData(1)
  EndSelect
  ProcedureReturn Result
EndProcedure
BarryG
Addict
Addict
Posts: 4219
Joined: Thu Apr 18, 2019 8:17 am

Re: TrackBarGadget Backcolor!

Post by BarryG »

Thank you both! :)
Post Reply