Page 1 of 1

TrackBarGadget Backcolor!

Posted: Sun Feb 15, 2009 8:32 pm
by funnyguy
I created a TrackBarGadget in my Red colored window. But the trackbar gadget stands out coz its back color has not changed.

Posted: Sun Feb 15, 2009 9:50 pm
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


Re: TrackBarGadget Backcolor!

Posted: Wed Nov 13, 2024 1:07 am
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

Re: TrackBarGadget Backcolor!

Posted: Wed Nov 13, 2024 5:00 am
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

Re: TrackBarGadget Backcolor!

Posted: Wed Nov 13, 2024 10:19 am
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

Re: TrackBarGadget Backcolor!

Posted: Wed Nov 13, 2024 10:44 am
by BarryG
Thank you both! :)