Custom SpinGadget() [Windows]

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4636
Joined: Sun Apr 12, 2009 6:27 am

Custom SpinGadget() [Windows]

Post by RASHAD »

- Using WinCallBack()
This is the best

Code: Select all

Global max,min

Procedure WinCB(hWnd, uMsg, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case #WM_NOTIFY
      *updn.NM_UPDOWN = lParam
      status = Val(GetGadgetText(0))
      If status <= max
        If *updn\iDelta < 0
            status + 1
        Else
            status - 1 
        EndIf
      EndIf      
      If status > max
        status = max
      EndIf
      If status < min
        status = min
      EndIf
      SetGadgetText(0,Str(status))  

  EndSelect
  ProcedureReturn result 
EndProcedure

max = 50
min = -50

LoadFont(0,"consolas",14)
OpenWindow(0, 100, 100, 400, 300, "SpinGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ContainerGadget(1,10,10,84,32,#PB_Container_Flat)
  TextGadget(0,0,0,60,30,"",#SS_CENTER|#SS_CENTERIMAGE| #SS_NOTIFY)
  SetGadgetColor(0,#PB_Gadget_BackColor,$FFFFFF)
  SetGadgetColor(0,#PB_Gadget_FrontColor,$0000FF)
  SetGadgetFont(0,FontID(0))
  hSpin = CreateWindowEx_(0,"msctls_updown32","",#WS_CHILD| #WS_VISIBLE,64,0,40,30,GadgetID(1),1,GetModuleHandle_(0),0)
CloseGadgetList()
SetWindowCallback(@WinCB())
SetGadgetText(0, "0")
Repeat
    EventID.l = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
        Quit = 1
    EndIf
Until Quit = 1
End 
- Using SubClass

Code: Select all

Global OldProc,hSpin

Procedure SpinSC(hWnd, uMsg, wParam, lParam)
  result = CallWindowProc_(OldProc, hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_LBUTTONDOWN
        If lparam >> 16 > 10
          status = Val(GetGadgetText(0))
          If status > 0
            status - 1
            SetGadgetText(0, Str(status))
          EndIf
        Else
          status = Val(GetGadgetText(0))
          If status < 100
            status + 1
            SetGadgetText(0, Str(status))
          EndIf
        EndIf

  EndSelect
  ProcedureReturn result 
EndProcedure

LoadFont(0,"consolas",14)
OpenWindow(0, 100, 100, 400, 300, "SpinGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ContainerGadget(1,10,10,84,32,#PB_Container_Flat)
  TextGadget(0,0,0,60,30,"",#SS_CENTER|#SS_CENTERIMAGE| #SS_NOTIFY)
  SetGadgetColor(0,#PB_Gadget_FrontColor,$0000FF)
  SetGadgetFont(0,FontID(0))
  hSpin = CreateWindowEx_(0,"msctls_updown32","",#WS_CHILD| #WS_VISIBLE,64,0,40,30,GadgetID(1),1,GetModuleHandle_(0),0)
CloseGadgetList()
OldProc = SetWindowLongPtr_(hSpin, #GWL_WNDPROC, @SpinSC())
SetGadgetText(0, "50")
Repeat
    EventID.l = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
        Quit = 1
    EndIf
Until Quit = 1
End 
Egypt my love
User avatar
Kwai chang caine
Always Here
Always Here
Posts: 5342
Joined: Sun Nov 05, 2006 11:42 pm
Location: Lyon - France

Re: Custom SpinGadget() [Windows]

Post by Kwai chang caine »

Nice !!! Both works :D
Thanks for sharing 8)
ImageThe happiness is a road...
Not a destination
Post Reply