1.因为Tab属于控件的控制快捷键 所以不能再OnKeyUp及OnKeyDown中截获 ,那么如何截获Tab键?
想截获Tab的方法有以下几种:
(1).再窗口的OnShutCut中可以截获到tab键等控制快捷键, Msg.CharCode即为截获到的按键的键值.
procedure TFrmHWYDLR_Six.FormShortCut(var Msg: TWMKey;
var Handled: Boolean);
begin
inherited;
if (Msg.CharCode = VK_Tab) and (Self.ActiveControl.Name = 'm_KHDMFHR') then
begin
if GetKeyState(VK_SHIFT) < 0 then
pbTabShift := True;
end;
end;
(2).利用ApplicationEvents控件拦截消息
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message=WM_keydown then
showmessage(inttostr(msg.wparam));
end;
(3).利用Hook建立键盘钩子
2.如何判断 检测 Shift Alt Ctrl 等键状态的方法(按下或未按下)?
利用 GetKeyState()函数 .
如果其返回值小于0,即处于按下状态;反之,即处于未按下状态.
if GetKeyState(VK_SHIFT) < 0 then //如果VK_SHIFT按下