![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WM_KEYDOWN = Shift + Tab? [D7, WinXP]
tradakad © (2005-01-19 14:46:00)имеется EditBox c назначенной процедурой обработки событий
pr_Conf:=Pointer(GetWindowLong(hMsgEditConf,GWL_WNDPROC));
SetWindowLong(hMsgEditConf,GWL_WNDPROC,Longint(@ConfProc));
function ConfProc(hwnd,msg,wparam,lParam:longint):longint;stdcall;
begin
Result:=CallWindowProc(pr_Conf,hWnd,Msg,wParam,lParam);
case Msg of
WM_KEYDOWN : if wparam=9 then SetFocus(hMsgBtn);
end;
end;
т.е. если нажата клавиша Tab - делаем то -то. а как проверить нажата ли Tab просто или с Shift?
tradakad (2005-01-19 15:45:00) [1]Спасибо! но WM_KEYDOWN приходит EditBoxу потому что
pr_BtnClick:=Pointer(GetWindowLong(hMsgBtn,GWL_WNDPROC));
SetWindowLong(hMsgBtn,GWL_WNDPROC,Longint(@BtnProc));
Игорь Шевченко (2005-01-19 15:32:00) [2](GetKeyState (VK_SHIFT) and $8000) <> 0 - клавиша нажата
tradakad (2005-01-19 15:25:00) [3]да. так работает. одно действие если при нажатом Tab нажат Shift и другое если не нажат. я пробовал так
if (GetKeyState(VK_LSHIFT)<>1) or (GetKeyState(VK_RSHIFT)<>1) then SetFocus(hMsgEditPass) else SetFocus(hMsgBtn);
происходит каша. т.е. shift работает как caps lock,т.е. нажал шифт, отпустил - выполняется все как при нажатом, еще раз нажал , отпусти - выполняется как при ненажатом.. почему?
Игорь Шевченко (2005-01-19 15:15:00) [4]А разве WM_KEYDOWN с кодом 9 приходит EditBox'у, а не родительскому окну ?
В любом случае (GetKeyState (VK_SHIFT) and $8000) <> 0 - клавиша нажата.
tradakad (2005-01-19 15:02:00) [5]да пробую
case Msg of
WM_KEYDOWN :
case wparam of
9:
begin
if (GetKeyState(VK_RSHIFT)=1) or (GetKeyState(VK_LSHIFT)=1) then
SetFocus(hMsgBtn) else
SetFocus(hMsgEditConf);
end;
но не работает ...
Игорь Шевченко (2005-01-19 14:52:00) [6]GetKeyState ?