ReturnKeyToButtonClick

Share your advanced PureBasic knowledge/code with the community.
User avatar
Droopy
Enthusiast
Enthusiast
Posts: 658
Joined: Thu Sep 16, 2004 9:50 pm
Location: France
Contact:

ReturnKeyToButtonClick

Post by Droopy »

Code updated For 5.20+

By default you can activate a Button with the SPACE key, but you can't with RETURN.

This example show howto solve this problem

Code: Select all

;/ Simulate a left click when you press ENTER over an activated Button
;/ Author: Nico & Droopy

#Window_0=0
#Button_0=1
#Button_1=2

ProcedureDLL ReturnKeyToButtonClick(Window)
  If EventwParam()=#VK_RETURN
    handle=GetFocus_()
    buffer.s=Space(255)
    GetClassName_(handle,@buffer,Len(buffer))
    If buffer="Button"
      PostMessage_(WindowID(Window),#WM_COMMAND,#PB_EventType_LeftClick<<16,handle)
    EndIf
  EndIf
EndProcedure

OpenWindow(#Window_0, 216, 0, 130, 111, "Return Test",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_ScreenCentered)

ButtonGadget(#Button_0, 10, 10, 110, 40, "OK")
ButtonGadget(#Button_1, 10, 60, 110, 40, "CANCEL")
SetActiveGadget(#Button_0)

Repeat
  
  Select WaitWindowEvent()
      
      ;/ Manage Event when user press RETURN key
    Case #WM_KEYDOWN
      ReturnKeyToButtonClick(#Window_0)
      
      ;/ Manage Gadget event
    Case #PB_Event_Gadget
      Select EventGadget()
          
        Case #Button_0
          Debug "e"
          Beep_(400,250)
          
        Case #Button_1
          Beep_(800,250)
          
      EndSelect
      
    Case #WM_CLOSE
      End
      
  EndSelect
ForEverr
User avatar
Droopy
Enthusiast
Enthusiast
Posts: 658
Joined: Thu Sep 16, 2004 9:50 pm
Location: France
Contact:

Post by Droopy »

Bug corrected

Code: Select all

;/ Simulate a left click when you press ENTER over an activated Button 
;/ Author: Nico & Droopy 

#Window_0=0 
#Button_0=1 
#Button_1=2 

ProcedureDLL ReturnKeyToButtonClick(Window) 
  If EventwParam()=#VK_RETURN 
    handle=GetFocus_() 
    buffer.s=Space(255) 
    GetClassName_(handle,@buffer,Len(buffer)) 
    If buffer="Button" 
      PostMessage_(WindowID(Window),#WM_COMMAND,#PB_EventType_LeftClick<<16,handle) 
    EndIf 
  EndIf 
EndProcedure 

OpenWindow(#Window_0, 216, 0, 130, 111,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_ScreenCentered, "Return Test") 
CreateGadgetList(WindowID()) 
ButtonGadget(#Button_0, 10, 10, 110, 40, "OK") 
ButtonGadget(#Button_1, 10, 60, 110, 40, "CANCEL") 
ActivateGadget(#Button_0) 

Repeat 
  
  Select WaitWindowEvent() 
    
    ;/ Manage Event when user press RETURN key 
    Case #WM_KEYDOWN 
      ReturnKeyToButtonClick(#Window_0) 
      
      ;/ Manage Gadget event 
    Case #PB_Event_Gadget 
      Select EventGadgetID() 
        
        Case #Button_0 
          Beep_(400,250) 
          
        Case #Button_1 
          Beep_(800,250) 
          
      EndSelect 
      
    Case #WM_CLOSE 
      End 
      
  EndSelect 
ForEver
thanks to nico
Blade
Enthusiast
Enthusiast
Posts: 362
Joined: Wed Aug 06, 2003 2:49 pm
Location: Venice - Italy, Japan when possible.
Contact:

Post by Blade »

Nice! (and useful!)
Post Reply