Page 1 of 1

disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 10:33 am
by hss
hello

how to stop certain keys--like #VK_UP--from being interpreted by EditorGadget?
in this example, the caret always jumps to last position--but, optimally, really nothing
should happen if #VK_UP gets pressed

Code: Select all

Global EditorNormalProc

Procedure.i EditorSubclassProc(hWnd, uMsg, wParam, lParam)

  If uMsg=#WM_KEYUP And wparam=#VK_UP
   p=Len(GetGadgetText(0))
   SendMessage_(GadgetID(0),#EM_SETSEL,p,p)  ;not-good attempt
  EndIf
  
  ProcedureReturn CallWindowProc_(EditornormalProc,hWnd,uMsg,wParam,lParam):
  
EndProcedure


       
OpenWindow(0,0,0,500,300,"")


EditorGadget(0,10,10,480,280)
Editornormalproc=SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@EditorSubclassproc())   

For i=0 To 10
AddGadgetItem(0,i,"Line "+Str(i))
Next
  
p=Len(GetGadgetText(0))
SendMessage_(GadgetID(0),#EM_SETSEL,p,p)
SetActiveGadget(0)
  
  
Repeat : Until WaitWindowEvent(10)=#WM_CLOSE

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 10:46 am
by srod

Code: Select all

Procedure.i EditorSubclassProc(hWnd, uMsg, wParam, lParam)

  If (uMsg<>#WM_KEYUP And uMsg<>#WM_KEYDOWN) Or wparam<>#VK_UP
    ProcedureReturn CallWindowProc_(EditornormalProc,hWnd,uMsg,wParam,lParam):
  EndIf
EndProcedure

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 10:47 am
by MachineCode
hss wrote:optimally, really nothing should happen if #VK_UP gets pressed
And why should nothing happen when the user presses the Up key to move up the text? It's an EditorGadget, for editing. Why are you forcing the user to not edit, then? Wrong gadget for the job, I assume?

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 10:50 am
by srod
I've done this in the past to mimic a console in a GUI etc.

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 10:51 am
by MachineCode
Based on his example, it looks more like he wants a List[View|Icon]Gadget.

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 11:23 am
by hss
srod wrote:I've done this in the past to mimic a console in a GUI etc.
yay!

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 11:46 am
by MachineCode
:P

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 12:03 pm
by RASHAD
Glad you are still around srod

Code: Select all

OpenWindow(0, 0, 0, 400, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  AddKeyboardShortcut(0, #PB_Shortcut_Up, 10)
  EditorGadget(0, 10, 10, 380, 280)
  Repeat
    event = WaitWindowEvent()

Until event = #PB_Event_CloseWindow

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 12:13 pm
by hss
nice one, RASHAD;

but.. how to only allow 'a' character?


this won't .. triggers, but still puts non-a-chars to Editor

Code: Select all

Procedure.i EditorSubclassProc(hWnd, uMsg, wParam, lParam)
  
  
  If (uMsg=#WM_KEYUP Or uMsg=#WM_KEYDOWN) And  wParam<>65
    Debug "everyhing but 'a' pressed"
    ProcedureReturn

  EndIf
  
    ProcedureReturn CallWindowProc_(EditornormalProc,hWnd,uMsg,wParam,lParam):
    
EndProcedure

Re: disable certain key-behavior in EditorGadget

Posted: Sun May 29, 2011 12:50 pm
by RASHAD
Hi hss

See next you allow any key
You can block any key

# 1

Code: Select all

Procedure Blockkey()
Debug Gadget
If GetActiveGadget() = 0
RemoveKeyboardShortcut(0, #PB_Shortcut_All)
AddKeyboardShortcut(0,#PB_Shortcut_Up, 10)
ElseIf GetActiveGadget() = 1
  For i = 32 To 90
   AddKeyboardShortcut(0, i,i)
   AddKeyboardShortcut(0,#PB_Shortcut_Shift | i,i+60)   
Next
  RemoveKeyboardShortcut(0, 65)
 EndIf
EndProcedure


OpenWindow(0, 0, 0, 400, 300, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 10, 10, 380, 250)
  StringGadget(1, 10, 270 ,380,20,"a")
  Repeat
  Select WaitWindowEvent()
      
       Case #PB_Event_CloseWindow
          Q = 1       
     
      Case #PB_Event_Gadget
          Select EventGadget()
           Case 0
               Blockkey() 
           
           Case 1
               Blockkey()
                                          
          EndSelect
  EndSelect
Until Q = 1

Or
#2

Code: Select all

Global EditorNormalProc

Procedure.i EditorSubclassProc(hWnd, uMsg, wParam, lParam)
   Select uMsg
      Case #WM_KEYUP,#WM_KEYDOWN
        If  wparam=#VK_UP
          ProcedureReturn 0
        EndIf
        
      Case #WM_CHAR
        If wParam = 'A' Or wParam = 'a'
         ProcedureReturn 0
      EndIf
   EndSelect
   
   ProcedureReturn CallWindowProc_(EditorNormalProc,hWnd,uMsg,wParam,lParam)
 
EndProcedure


       
OpenWindow(0,0,0,500,300,"")

EditorGadget(0,10,10,480,280)
Editornormalproc=SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@EditorSubclassproc())   

For i=0 To 10
AddGadgetItem(0,i,"Line "+Str(i))
Next
 
p=Len(GetGadgetText(0))
SendMessage_(GadgetID(0),#EM_SETSEL,p,p)
SetActiveGadget(0)
 
 
Repeat : Until WaitWindowEvent(10)=#WM_CLOSE