Author: Jonas Bilinkevicius
I use SendMessage(EditHandle, WM_KEYDOWN, VK_TAB, 0) to mimic pressing TAB key, but
how about SHIFT-TAB? I know I can use WM_NEXTDLGCTL, but that is exactly what I try
to avoid.
Answer:
You can do both by sending the WM_KEYDOWN message to the control or generate the
keyboard event through the keybd_event function. See the example below for details:
1 { ... }
2 var
3 XKeyState, XNewKeyState: TKeyboardState;
4 begin
5 try
6 {set shift key down}
7 GetKeyboardState(XKeyState);
8 XNewKeyState := XKeyState;
9 XNewKeyState[VK_SHIFT] := $81;
10 SetKeyboardState(XNewKeyState);
11 {post tab key down message}
12 PostMessage(YourComponent.Handle, WM_KEYDOWN, VK_TAB, 0);
13 Application.ProcessMessages;
14 finally
15 {return old keyboard state back}
16 SetKeyboardState(XKeyState);
17 end;
18 end;
19
20 or you use
21
22 { ... }
23 keybd_event(VK_SHIFT, 0, 0, 0);
24 keybd_event(VK_TAB, 0, 0, 0);
25 keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
26 end;
|