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
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