Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2009, 08:00   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Отлов одновременно нескольких клавиш.

Собственно как поймать нажатие двух клавиш одновременно? Если можно, покажите два метода: через onKeyDown (или аналогичный обработчик на Events) и через апишную отловку мессаг.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.11.2009, 08:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Интересуют CTRL ALT SHIFT c клавишей или две скажем буквенных клавиши?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2009, 08:41   #3
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Через KeyDown примерно так:
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ((ssAlt in Shift) and (Key=vk_F4)) then
  begin
    ShowMessage('Не закроешь!!!');
    Key:=0;
  end;
end;
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 24.11.2009, 09:35   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

через API... в своем проекте Alius:
Код:
Function WindowProc(HWND,
                    Msg,
                    wParam,
                    lParam: Longint): Longint;
 Stdcall;
 Begin
   Result := DefWindowProc(HWND, Msg, wParam, lParam);
   Case Msg Of

   WM_MOUSEMOVE: LightForButtons;
   WM_DESTROY  : ShutDown;    

   WM_KEYDOWN: begin
    if wparam = 17 then ; // CTR-
    if wparam = 16 then ; // SHIFT-
    if wparam = 37 then ; // left
    if wparam = 39 then ; // reight
    if wparam = 38 then messagebox(0, '', '', 0); // up
    if wparam = 40 then ; // down
    // ...ну и так далее, можно еще учитывать lparam

    // а вот и одновременное-
    If ((GetKeyState(VK_CONTROL) AND 128)=128) and // "CTR"
      ((GetKeyState(ord('4'))   AND 128)=128) then messagebox(0, '', '', 0) // "4"
   end;

   End;
 End;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 24.11.2009 в 11:59.
raxp вне форума Ответить с цитированием
Старый 24.11.2009, 15:55   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Мммм... А если скажем, что буквенная комбинация? Как пример можно такое привести: если в шутере нажать W - вперед, D - вправо, то W+D = диагональ...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.11.2009, 16:09   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

дык, все так же...
Код:
If ((GetKeyState(ord('D')) AND 128)=128) and
      ((GetKeyState(ord('W'))   AND 128)=128) then messagebox(0, '', '', 0);
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.11.2009, 16:19   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Огромное спасибо!
"+" представим, что я нажал его. Проклятое ограничение...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.11.2009, 17:11   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

GetKeyboardState будет чуть быстрее

Код:
  var keys: TKeyboardState;

  GetKeyboardState(keys);
  If (keys[ord('D')] and keys[ord('W')]) and 128 = 128 then // W+D
  If (keys[ord('D')] or  keys[ord('W')]) and 128 = 128 then // W, D, W+D
пыщь

Последний раз редактировалось JTG; 24.11.2009 в 17:27.
JTG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура поиска нескольких файлов одновременно GvR Общие вопросы Delphi 3 15.11.2009 02:43
Фильтрация нескольких таблиц одновременно на одном листе при заданных условиях KNatalia Microsoft Office Excel 11 08.11.2009 21:47
Воспроизведение нескольких звуков одновременно GodSmack Общие вопросы Delphi 3 13.08.2009 02:28
Отлов горячих клавиш, Builder C++ 6.0 MsF C++ Builder 2 24.02.2009 11:02
Эмуляция нажатия нескольких клавиш -=Shad0www Общие вопросы Delphi 3 12.05.2008 08:13