Tab key with DateGadget

Just starting out? Need help? Post your questions and find answers here.
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Tab key with DateGadget

Post by Dude »

Can the Tab key be set to move across the fields of a DateGadget (like you can with the arrow keys) instead of switching to the next gadget? And backwards with Shift+Tab, too. I tried this with its GadgetID() but it didn't work:

Code: Select all

SetWindowLongPtr_(hWnd,#GWL_STYLE,GetWindowLongPtr_(hWnd,#GWL_STYLE)!#WS_TABSTOP)
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Tab key with DateGadget

Post by RASHAD »

Hi Dude

Code: Select all

If OpenWindow(0, 0, 0, 235, 250, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  DateGadget(0, 10, 10, 210, 25, "Date: %mm/%dd/%yyyy Time: %hh:%ii")
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1

    Case #WM_KEYDOWN
        If GetActiveGadget() = 0 And EventwParam() = 9
          If GetAsyncKeyState_(#VK_SHIFT)
            keybd_event_(#VK_LEFT,0,0,0)
            keybd_event_(#VK_LEFT,0,#KEYEVENTF_KEYUP,0)
          Else
            keybd_event_(#VK_RIGHT,0,0,0)
            keybd_event_(#VK_RIGHT,0,#KEYEVENTF_KEYUP,0)            
          EndIf
        EndIf
  EndSelect
Until Quit = 1
EndIf
Egypt my love
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Tab key with DateGadget

Post by Dude »

Hi Rashad, unfortunately that doesn't work when more than one gadget exists, and doesn't seem to work with Shift+Tab at all. It works if I use any other key, like Enter and Shift+Enter instead of Tab, though.

Code: Select all

If OpenWindow(0, 0, 0, 235, 100, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  gid=DateGadget(0, 10, 10, 210, 25, "Date: %mm/%dd/%yyyy Time: %hh:%ii")

  ; Next line is required for Tab, but doesn't make it work with Shift+Tab. :(
  SetWindowLongPtr_(gid,#GWL_STYLE,GetWindowLongPtr_(gid,#GWL_STYLE)!#WS_TABSTOP)

  ButtonGadget(1, 10, 45, 210, 25, "test")

  SetActiveGadget(0)

  Repeat

    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
      Case #WM_KEYDOWN
        If GetActiveGadget() = 0 And EventwParam() = 9
          If GetAsyncKeyState_(#VK_SHIFT)
            Debug "this is never seen!"
            keybd_event_(#VK_LEFT,0,0,0)
            keybd_event_(#VK_LEFT,0,#KEYEVENTF_KEYUP,0)
          Else
            keybd_event_(#VK_RIGHT,0,0,0)
            keybd_event_(#VK_RIGHT,0,#KEYEVENTF_KEYUP,0)           
          EndIf
        EndIf
    EndSelect

  Until Quit = 1

EndIf
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Tab key with DateGadget

Post by RASHAD »

Hi again
How can I know when you changed your mind :mrgreen:

Code: Select all

If OpenWindow(0, 0, 0, 235, 100, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  gid=DateGadget(0, 10, 10, 210, 25, "Date: %mm/%dd/%yyyy Time: %hh:%ii")

  ButtonGadget(1, 10, 45, 210, 25, "test")

  AddKeyboardShortcut(0,#PB_Shortcut_Tab,10)
  AddKeyboardShortcut(0,#PB_Shortcut_Tab|#PB_Shortcut_Shift ,20)
  Repeat

    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 10
            If GetActiveGadget() = 0
              keybd_event_(#VK_RIGHT,0,0,0)
              keybd_event_(#VK_RIGHT,0,#KEYEVENTF_KEYUP,0)
            EndIf
            
          Case 20
            If GetActiveGadget() = 0
              keybd_event_(#VK_LEFT,0,0,0)
              keybd_event_(#VK_LEFT,0,#KEYEVENTF_KEYUP,0)
            EndIf
        EndSelect
    EndSelect
  Until Quit = 1
EndIf
Egypt my love
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: Tab key with DateGadget

Post by Mijikai »

Very nice RASHAD :D

I tried to find a solution but i gave up when i did not find a way to modify #DLGC_WANTTAB
in the WindowCallback.

Anyhow here is my code if someone wants to play with it:

Code: Select all

EnableExplicit

Procedure.i WindowCallback(Handle.i,Message.i,wParam.i,lParam.i)
  If #WM_GETDLGCODE
    Select wParam
      Case #DLGC_WANTTAB
        If lParam And GetKeyState_(#VK_SHIFT) & 1
          Debug 1
        Else
          Debug 0
        EndIf
    EndSelect
  EndIf
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure

If OpenWindow(0,#Null,#Null,240,300,#Null$,#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowCallback(@WindowCallback())
  If DateGadget(1,10,10,210,25,"Date: %mm/%dd/%yyyy Time: %hh:%ii") And ButtonGadget(2,10,100,50,20,"Test")
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
  CloseWindow(0)
EndIf

End
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Tab key with DateGadget

Post by Dude »

RASHAD wrote:How can I know when you changed your mind :mrgreen:
My code was just an example... of course my real app has more than one gadget. ;)

Thanks for your update! I'll fix it to suit my needs (it stops me tabbing off the button now, but I should be able to fix that!). :lol:
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Tab key with DateGadget

Post by RASHAD »

Hi Dude :)
I knew that you will say that
Modified code
Now everything are in normal state

Code: Select all

Procedure WindowProc(hWnd,uMsg,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select uMsg
    Case  #WM_MOVE
      ResizeWindow(1,WindowX(0)+14,WindowY(0)+35,#PB_Ignore, #PB_Ignore)
           
    Case #WM_NCACTIVATE
      Result = 1

  EndSelect
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 235, 100, "DateGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

  OpenWindow(1, WindowX(0)+14,WindowY(0)+35, 210, 25, "", #PB_Window_BorderLess,WindowID(0))
  UseGadgetList(WindowID(1))
   DateGadget(0, 0, 0, 210, 25, "Date: %mm/%dd/%yyyy Time: %hh:%ii")
   
  UseGadgetList(WindowID(0))
  ButtonGadget(1, 10, 45, 100, 25, "test")
  ButtonGadget(2, 120, 45, 100, 25, "test 2")

  AddKeyboardShortcut(1,#PB_Shortcut_Tab,10)
  AddKeyboardShortcut(1,#PB_Shortcut_Tab|#PB_Shortcut_Shift ,20)
  
  SetActiveWindow(0)
  SetWindowCallback(@WindowProc())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 10
            If GetActiveGadget() = 0
              keybd_event_(#VK_RIGHT,0,0,0)
              keybd_event_(#VK_RIGHT,0,#KEYEVENTF_KEYUP,0)
            EndIf
            
          Case 20
            If GetActiveGadget() = 0
              keybd_event_(#VK_LEFT,0,0,0)
              keybd_event_(#VK_LEFT,0,#KEYEVENTF_KEYUP,0)
            EndIf
        EndSelect
    EndSelect
  Until Quit = 1
EndIf
Egypt my love
Dude
Addict
Addict
Posts: 1907
Joined: Mon Feb 16, 2015 2:49 pm

Re: Tab key with DateGadget

Post by Dude »

Thanks again, Rashad. :)
Post Reply