Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 751

/ вопрос открыт /

Приветствую, уважаемые эксперты!Подскажите пожалуйста как проверить что переменная Key принадлежит множеству в котором зашита вся клавиатура.Допустим в качестве примера написать,что при нажатии любой клавиши в memo заносится название клавиши и время её нажатия.

GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 7 июля 2008, 06:51
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Шичко Игорь

Здравствуйте, GAZ!
Нечто типа того:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
Memo1.Lines.Add('Нажата клавиша ' + key + ' Время: ' + DateTimeToStr(Now));
if Key = Chr(VK_RETURN) then // Проверка нажатия клавиши Enter
begin
Memo1.Lines.Add('Нажата клавиша: Enter Время: ' + DateTimeToStr(Now));
key:= #0;
end;
end;
Описания кодов клавиш - в модуле Windows.pas

Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 7 июля 2008, 08:44
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: min@y™

Цитата:

написать,что при нажатии любой клавиши в memo заносится название клавиши и время её нажатия.

Да как два байта обнулить! Клади на форму Мемо, сделай у формы KeyPreview:= True, а в её обработчик OnKeyDown вставь вот такой код:
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  S: string;
begin
  S:= '';
 
  // Отслеживаем нажатия клавиш и выводим их в Memo
  case Key of
    $30..$40:               S:= IntToStr(Key - $30);            //  Клавиши 0..9
    VK_F1..VK_F24:          S:= 'F' + IntToStr(Key - 111);      //  Клавиши F1..F24
    VK_NUMPAD0..VK_NUMPAD9: S:= 'Numpad ' + IntToStr(Key - 96); //  Клавиши цифровой клавы
    VK_BACK:                S:= 'BackSpace';                    //  Backspace key
    VK_TAB:                 S:= 'Tab';                          //  Tab key
    VK_RETURN:              S:= 'Enter';                        //  Enter key
    VK_SHIFT:               S:= 'Shift';                        //  Shift key
    VK_CONTROL:             S:= 'Ctrl';                         //  Ctrl key
    VK_MENU:                S:= 'Alt';                          //  Alt key
    VK_PAUSE:               S:= 'Pause';                        //  Pause key
    VK_CAPITAL:             S:= 'CapsLock';                     //  Caps Lock key
    VK_ESCAPE:              S:= 'Escape';                       //  Esc key
    VK_SPACE:               S:= 'Пробел';                       //  Space bar
    VK_PRIOR:               S:= 'PageUp';                       //  Page Up key
    VK_NEXT:                S:= 'PageDown';                     //  Page Down key
    VK_END:                 S:= 'End';                          //  End key
    VK_HOME:                S:= 'Home';                         //  Home key
    VK_LEFT:                S:= 'Left';                         //  Left Arrow key
    VK_UP:                  S:= 'Up';                           //  Up Arrow key
    VK_RIGHT:               S:= 'Right';                        //  Right Arrow key
    VK_DOWN:                S:= 'Down';                         //  Down Arrow key
    VK_SNAPSHOT:            S:= 'PrintScreen';                  //  Print Screen key
    VK_INSERT:              S:= 'Insert';                       //  Insert key
    VK_DELETE:              S:= 'Delete';                       //  Delete key
    VK_LWIN:                S:= 'Левый Win';                    //  Left Windows key (Microsoft keyboard)
    VK_RWIN:                S:= 'Правый Win';                   //  Right Windows key (Microsoft keyboard)
    VK_MULTIPLY:            S:= 'Numpad *';                     //  Multiply key (numeric keypad)
    VK_ADD:                 S:= 'Numpad +';                     //  Add key (numeric keypad)
    VK_SUBTRACT:            S:= 'Numpad -';                     //  Subtract key (numeric keypad)
    VK_DIVIDE:              S:= 'Numpad /';                     //  Divide key (numeric keypad)
    VK_NUMLOCK:             S:= 'NumLock';                      //  Num Lock key
    VK_SCROLL:              S:= 'ScrollLock';                   //  Scroll Lock key
  else
    S:= Char(Key and $7F);
  end; // case
 
  if (ssShift in Shift) and (Key <> VK_SHIFT)
    then S:= 'Shift + ' + S;
 
  if (ssCtrl in Shift) and (Key <> VK_CONTROL)
    then S:= 'Ctrl + ' + S;
 
  if (ssAlt in Shift) and (Key <> VK_MENU)
    then S:= 'Alt + ' + S;
 
  S:= ' [0x' + IntToHex(Key, 4) + ']'#9 + S;
  Memo.Lines.Add(S);
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 7 июля 2008, 09:15
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:42
Выполнено за 0.03 сек.