Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо