|
Вопрос # 1 751/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!Подскажите пожалуйста как проверить что переменная Key принадлежит множеству в котором зашита вся клавиатура.Допустим в качестве примера написать,что при нажатии любой клавиши в memo заносится название клавиши и время её нажатия.
 |
Вопрос задал: 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
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|