Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизWM_KEYDOWN = Shift + Tab? Найти похожие ветки
← →
tradakad © (2005-01-19 14:46) [0]имеется 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?
← →
Игорь Шевченко © (2005-01-19 14:52) [1]GetKeyState ?
← →
tradakad © (2005-01-19 15:02) [2]да пробую
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 15:15) [3]А разве WM_KEYDOWN с кодом 9 приходит EditBox"у, а не родительскому окну ?
В любом случае (GetKeyState (VK_SHIFT) and $8000) <> 0 - клавиша нажата.
← →
tradakad © (2005-01-19 15:25) [4]да. так работает. одно действие если при нажатом 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:32) [5](GetKeyState (VK_SHIFT) and $8000) <> 0 - клавиша нажата
← →
tradakad © (2005-01-19 15:45) [6]Спасибо! но WM_KEYDOWN приходит EditBoxу потому что
pr_BtnClick:=Pointer(GetWindowLong(hMsgBtn,GWL_WNDPROC));
SetWindowLong(hMsgBtn,GWL_WNDPROC,Longint(@BtnProc));
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c