Tab Capture


How can i trap the tab-key like a normal key instead of switching to the next control ? (TCustomEdit)

Kind regards,
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

rene100Connect With a Mentor Commented:

I think you have to set a keyboard-hook, because the
key-down event isn't send when tab is pressed.
you can do this as follow:
set the hook with
myhook:=setwindowshookex(wh_keyboard, @hook_event, system.hInstance, 0);

hook event his a function declared as follow:
function hook-event(code: Integer; wparam: Word; lparam: Longint): longint; stdcall;

wparam contains the key-code (9 for the tab-key)

It's already doing that.... It's alwayus as a tab, and you can change it so it goes to the next control...
aluikenAuthor Commented:
No, i want to use the tab key, if i write a proc for keypress or keydown then i can not trap this key. I want to use the tab key for a function in the control..
How about in OnKeyDown() I think it accepts

if key = VK_TAB then
  caption := 'The was just pressed ;->';

or OnKeyPress()

if key = #9 then
  caption := 'The was just pressed ;->';

Viktor Ivanov
Rene, I have been struggling with this problem for some time.  I have converted a complex DOS based accounting system to Windows and have been able to mimic every single aspect of DOS behavior, procedurely moving a user through an extremely complicated agricultural accounting entry,  I have done everything, shut off the mouse, used the ENTER key to set focus to predetermined  controls, and on press of the ENTER key I need to update variables, which dictate the twists and turns the entry procedure will take.  When the user presses the TAB key however, Windows responds by sending focus on,  What I need to do is intercept the actual message, at the WndProc level, modify the keycode of 9 to 13, thus tricking the system into thinking that the ENTER key had been pressed instead.  

For the sake of code maintenance I don't want to update variables in the lost focus handlers because I don't want any reverse flows updating my flow flag variables.  which SHIFT+TAB provides.  I don't doubt that I could build a huge "mousetrap" to accomplish this, but I think that using your solution technique sounds a whole lot more appealing to me.

I tried your solution, with great anticipation, but found that the wparam that gets sent from the hook to my callback procedure is always 40, not 9 for TAB, 13 for ENTER, 27 for Escape etc... as I had expected, no matter which key is pressed.  

I used your code example verbatim.  Any ideas?  I really appreciate your concise, elegant solution,  It just didn't work for me.... I haven't done a lot of message hooking and am not really up to speed on the technique.

I am familiar with writing specific message handlers and I understand how to crack a message into wparam and lparam
I also am comfortable with function pointers.

Paul Steinbrueck
Windows Development Leader
FarmFact Accounting System
All Courses

From novice to tech pro — start learning today.