5 что означает функция перехвата ввода текста с клавиатуры

Обновлено: 03.05.2024

Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.

Получает следующий символ или функциональную клавишу, нажатую пользователем.

Перегрузки

Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша отображается в окне консоли.

Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша дополнительно отображается в окне консоли.

ЧитатьКлюч()

Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша отображается в окне консоли.

Возврат

Объект, описывающий константу ConsoleKey и символ Unicode, если таковой имеется, который соответствует нажатой клавише консоли. Объект ConsoleKeyInfo также описывает в побитовой комбинации значений ConsoleModifiers, были ли одновременно с клавишей консоли нажаты одна или несколько клавиш-модификаторов Shift, Alt или Ctrl.

Исключения

Свойство In перенаправляется из какого-либо потока, отличного от консоли.

Примеры

Одним из наиболее распространенных способов использования метода ReadKey() является приостановка выполнения программы до тех пор, пока пользователь не нажмет клавишу и приложение не завершит работу или не отобразит дополнительное информационное окно. В следующем примере метод ReadKey() используется для ожидания нажатия пользователем клавиши Enter перед завершением работы приложения.

Обратите внимание, что эта перегруженная версия метода ReadKey по умолчанию повторяет все отображаемые клавиши, которые пользователь нажимает на консоль. Чтобы подавить их, вызовите метод ReadKey с аргументом перехвата, равным true .

В следующем примере используется метод ReadKey() для отображения информации о том, какую клавишу нажал пользователь.

Примечания

Метод ReadKey ожидает, то есть блокирует поток, выдающий метод ReadKey, до тех пор, пока не будет нажата символьная или функциональная клавиша. Символ или функциональную клавишу можно нажимать в сочетании с одной или несколькими клавишами-модификаторами Alt, Ctrl или Shift. Однако нажатие клавиши-модификатора само по себе не приведет к возврату метода ReadKey.

В зависимости от вашего приложения вы можете использовать метод ReadKey в сочетании со свойством KeyAvailable.

Метод ReadKey читает с клавиатуры, даже если стандартный ввод перенаправляется в файл с помощью метода SetIn.

См. также

Относится к

Ключ чтения (логический)

Получает следующий символ или функциональную клавишу, нажатую пользователем. Нажатая клавиша дополнительно отображается в окне консоли.

Параметры

Определяет, отображать ли нажатую клавишу в окне консоли. true, чтобы не отображать нажатую клавишу; в противном случае ложь .

Возврат

Объект, описывающий константу ConsoleKey и символ Unicode, если таковой имеется, который соответствует нажатой клавише консоли. Объект ConsoleKeyInfo также описывает в побитовой комбинации значений ConsoleModifiers, были ли одновременно с клавишей консоли нажаты одна или несколько клавиш-модификаторов Shift, Alt или Ctrl.

Исключения

Свойство In перенаправляется из какого-либо потока, отличного от консоли.

Примеры

Одним из наиболее распространенных способов использования метода ReadKey является приостановка выполнения программы до тех пор, пока пользователь не нажмет клавишу и приложение не завершит работу или не отобразит дополнительное информационное окно. В следующем примере используется метод ReadKey(Boolean) для ожидания нажатия пользователем клавиши Enter перед завершением работы приложения. Обратите внимание, что если пользователь нажимает любую другую клавишу, это не отображается в консоли.

В следующем примере используется метод ReadKey(Boolean) для отображения информации о клавише, нажатой пользователем, без вывода этой клавиши на консоль.

Примечания

Метод ReadKey ожидает, то есть блокирует поток, выдающий метод ReadKey, до тех пор, пока не будет нажата символьная или функциональная клавиша. Символ или функциональную клавишу можно нажимать в сочетании с одной или несколькими клавишами-модификаторами Alt, Ctrl или Shift. Однако нажатие клавиши-модификатора само по себе не приведет к возврату метода ReadKey.

Если параметр перехвата равен true , нажатая клавиша перехватывается и не отображается в окне консоли; в противном случае отображается нажатая клавиша.

В зависимости от вашего приложения вы можете использовать метод ReadKey в сочетании со свойством KeyAvailable.

Метод ReadKey читает с клавиатуры, даже если стандартный ввод перенаправляется в файл с помощью метода SetIn.

Зарко Гайич имеет опыт работы с SQL и практические знания систем баз данных, таких как MS SQL Server, Firebird, Interbase и Oracle. Он также владеет XML, DHTML и JavaScript.

Представьте на мгновение создание какой-нибудь быстрой аркадной игры. Вся графика выводится, скажем, в TPainBox.TPaintBox не может получить фокус ввода — никакие события не запускаются, когда пользователь нажимает клавишу; мы не можем перехватывать клавиши управления курсором для перемещения нашего линкора. Делфи в помощь!

Перехватывать ввод с клавиатуры

Большинство приложений Delphi обычно обрабатывают пользовательский ввод с помощью определенных обработчиков событий, которые позволяют нам фиксировать нажатия клавиш пользователя и обрабатывать движения мыши.

Мы знаем, что фокус – это возможность получать данные, вводимые пользователем с помощью мыши или клавиатуры. Только объект, находящийся в фокусе, может получить событие клавиатуры. Некоторые элементы управления, такие как TImage, TPaintBox, TPanel и TLabel, не могут получить фокус. Основной целью большинства графических элементов управления является отображение текста или графики.

Если мы хотим перехватывать ввод с клавиатуры для элементов управления, которые не могут получить фокус ввода, нам придется иметь дело с Windows API, ловушками, обратными вызовами и сообщениями.

Перехватчики Windows

Технически функция-перехватчик — это функция обратного вызова, которую можно вставить в систему сообщений Windows, чтобы приложение могло получить доступ к потоку сообщений до того, как произойдет другая обработка сообщения. Среди многих типов перехватчиков Windows перехватчик клавиатуры вызывается всякий раз, когда приложение вызывает функцию GetMessage() или PeekMessage() и есть сообщение клавиатуры WM_KEYUP или WM_KEYDOWN для обработки.

Чтобы создать ловушку клавиатуры, которая перехватывает все вводимые с клавиатуры данные, направленные в данный поток, нам нужно вызвать функцию API SetWindowsHookEx. Подпрограммы, которые получают события клавиатуры, представляют собой определяемые приложением функции обратного вызова, называемые функциями ловушки (KeyboardHookProc). Windows вызывает вашу функцию ловушки для каждого сообщения о нажатии клавиши (клавиша вверх и клавиша вниз), прежде чем сообщение будет помещено в очередь сообщений приложения. Функция ловушки может обрабатывать, изменять или отбрасывать нажатия клавиш. Крючки могут быть локальными или глобальными.

Возвращаемое значение SetWindowsHookEx — это дескриптор только что установленной ловушки. Перед завершением приложение должно вызвать функцию UnhookWindowsHookEx, чтобы освободить системные ресурсы, связанные с ловушкой.

Пример перехвата клавиатуры

Для демонстрации перехватов клавиатуры мы создадим проект с графическим управлением, который может принимать нажатия клавиш. TImage является производным от TGraphicControl, его можно использовать в качестве поверхности для рисования в нашей гипотетической боевой игре. Так как TImage не может получать нажатия клавиш через стандартные события клавиатуры, мы создадим функцию ловушки, которая перехватывает все вводимые с клавиатуры данные, направленные на нашу поверхность рисования.

События клавиатуры для обработки TImage

Запустите новый проект Delphi и поместите один компонент изображения в форму. Задайте для свойства Image1.Align значение alClient. С визуальной частью покончено, теперь нам нужно заняться кодированием. Во-первых, нам понадобятся глобальные переменные:

Чтобы установить ловушку, мы вызываем SetWindowsHookEx в событии OnCreate формы.

Чтобы освободить системные ресурсы, связанные с хуком, мы должны вызвать функцию UnhookWindowsHookEx в событии OnDestroy:

Самая важная часть этого проекта — процедура обратного вызова KeyboardHookProc, используемая для обработки нажатий клавиш.

Вот и все. Теперь у нас есть окончательный код обработки клавиатуры.

Обратите внимание только на одно: этот код никоим образом не ограничивается использованием только с TImage.

Функция KeyboardHookProc служит общим механизмом KeyPreview и KeyProcess.

Несовместимый браузер
Эта страница не работает с Internet Explorer. Пожалуйста, просмотрите его в современном браузере, таком как Microsoft Edge.

Нажмите, чтобы начать демонстрацию
Примечание о вспомогательных технологиях: если вы используете программу чтения с экрана, вам может потребоваться отключить ее после запуска демонстрации, иначе она может перехватывать нажатия клавиш, мешая работе демонстрации.

Демонстрация включена. Введите на клавиатуре компьютера, чтобы увидеть результаты. Чтобы выйти из демонстрации, нажмите клавишу ESC на клавиатуре.

Вы вышли из демоверсии, нажав клавишу ESC. Чтобы возобновить демонстрацию, нажмите кнопку выше.

Использование этой демонстрации

Печатайте на физической клавиатуре, и экранная клавиатура показывает, какие нажатия клавиш распознаются.

Используя демонстрацию, вы можете увидеть, есть ли определенные комбинации клавиш, которые неправильно работают с вашей клавиатурой.

Как охотиться на призраков

Призраки могут быть неуловимыми. Просто потому, что вы нашли какую-то комбинацию из 6 клавиш, которая сообщает правильно, не обязательно означает, что каждая комбинация из 6 работает. На самом деле, самая простая конструкция клавиатуры имеет тысячи комбинаций из 3 клавиш, которые не работают! Это много, но все равно меньше 5% от общего количества комбинаций из 3-х клавиш.

Быстрый способ найти проблемные комбинации — нажать и удерживать A, S, D, W (самые популярные клавиши для перемещения в играх), а затем, удерживая их, нажимать по очереди все остальные клавиши. Если вы обнаружите, что клавиша не работает, попробуйте отпустить некоторые из клавиш ASDW. Высока вероятность того, что вы найдете комбинацию из трех клавиш, которая не сработает.

Если у вас есть приложение, использующее другие комбинации клавиш, обязательно попробуйте и их!

Ограничения

Некоторые ключи невозможно захватить. Примечательно, что браузеры Windows обычно не могут определить, когда нажата клавиша Print Screen.

Некоторые клавиши переведут фокус ввода с веб-страницы. Например, нажатие клавиши Windows переместит фокус в меню «Пуск». Чтобы продолжить использование демоверсии, переместите фокус обратно на веб-страницу, щелкнув демонстрационное окно.

Вспомните, что в разделе "Линейные функции" мы написали уравнение для линейной функции по графику. Теперь мы можем расширить наши знания о построении графиков линейных функций для более тщательного анализа графиков. Начните с рассмотрения рисунка 8. Мы сразу видим, что график пересекает ось y в точке (0, 4), так что это y- перехват.


Затем мы можем рассчитать уклон, найдя подъем и разбег. Мы можем выбрать любые две точки, но давайте посмотрим на точку (-2, 0). Чтобы добраться от этой точки до точки пересечения y-, мы должны продвинуться на 4 единицы вверх (подъем) и вправо на 2 единицы (бег). Таким образом, наклон должен быть

Подстановка наклона и y-пересечения в форму наклона-пересечения линии дает

Как сделать: Имея график линейной функции, найдите уравнение, описывающее функцию.

  1. Определите точку пересечения y-в уравнении.
  2. Выберите две точки для определения наклона.
  3. Замените точку пересечения y- и наклон на форму линии, пересекающую наклон.

Пример 4. Сопоставление линейных функций с их графиками

Сопоставьте каждое уравнение линейных функций с одной из линий на рисунке 9.

  1. [латекс]f\влево(х\вправо)=2x+3[/латекс]
  2. [латекс]г\влево(х\вправо)=2x - 3[/латекс]
  3. [латекс]ч\влево(х\вправо)=-2x+3[/латекс]
  4. [латекс]j\влево(х\вправо)=\fracx+3[/латекс]

График из трех линий, линия 1) проходит через (0,3) и (-2, -1), линия 2) проходит через (0,3) и ( -6,0), строка 3) проходит через (0,-3) и (2,1)

Решение

Проанализируйте информацию для каждой функции.

  1. Эта функция имеет наклон 2 и точку пересечения y 3. Она должна проходить через точку (0, 3) и наклоняться вверх слева направо. Мы можем использовать две точки, чтобы найти наклон, или мы можем сравнить его с другими перечисленными функциями. Функция g имеет тот же наклон, но другую точку пересечения y-. Линии I и III имеют одинаковый наклон, потому что они имеют одинаковый наклон. Строка III не проходит через (0, 3), поэтому f должна быть представлена ​​линией I.
  2. Эта функция также имеет наклон, равный 2, но y-перехват, равный –3. Он должен проходить через точку (0, –3) и наклоняться вверх слева направо. Он должен быть представлен строкой III.
  3. Эта функция имеет наклон –2 и y-пересечение, равное 3. Это единственная функция, указанная с отрицательным наклоном, поэтому она должна быть представлена ​​линией IV, поскольку она наклонена вниз от слева направо.
  4. Эта функция имеет наклон [latex]\frac[/latex] и точку пересечения y-3. Она должна проходить через точку (0, 3) и наклоняться вверх слева направо. правильно. Линии I и II проходят через (0, 3), но наклон j меньше, чем наклон f, поэтому линия для j должен быть более плоским. Эта функция представлена ​​строкой II.

Теперь мы можем переименовать линии, как показано на рисунке 10.


Поиск точки пересечения x линии

До сих пор мы находили точки пересечения y- функции: точки, в которых график функции пересекает ось y. Функция также может иметь точку пересечения x, которая представляет собой x-координату точки, где график функции пересекает x- ось. Другими словами, это входное значение, когда выходное значение равно нулю.

Чтобы найти точку пересечения x, установите функцию f(x) равной нулю и найдите значение х. Например, рассмотрим показанную функцию.

Установите функцию равной 0 и найдите x.

График функции пересекает ось x в точке (2, 0).

Все ли линейные функции имеют x-отрезки?

Нет.Однако линейные функции вида y = c, где c — ненулевое действительное число, являются единственными примерами линейных функций без x-перехват. Например, y = 5 — это горизонтальная линия на 5 единиц выше оси x. Эта функция не имеет x-перехватов.

График y = 5.

Общее примечание: x-intercept

Перехват x функции равен x, когда f(x) = 0. Его можно решить уравнением 0 = mx + b.

Пример 5. Поиск x-перехвата

Найдите x-отрезок [latex]f\left(x\right)=\fracx - 3[/latex].

Решение

Установите функцию равной нулю, чтобы найти x.

График пересекает ось x в точке (6, 0).

Анализ решения

График функции показан на рис. 12. Мы видим, что точка пересечения x равна (6, 0), как мы и ожидали.


Рис. 12. График линейной функции [latex]f\left(x\right)=\fracx - 3[/latex].

Попробуйте 4

Найдите x-отрезок [latex]f\left(x\right)=\fracx - 4[/latex].

Описание горизонтальных и вертикальных линий

Существует два особых случая линий на графике — горизонтальные и вертикальные линии. Горизонтальная линия указывает постоянный вывод или значение y. На рисунке 13 мы видим, что выход имеет значение 2 для каждого входного значения. Таким образом, изменение выхода между любыми двумя точками равно 0. В формуле наклона числитель равен 0, поэтому наклон равен 0. Если мы используем m = 0 в уравнении [latex]f \left(x\right)=mx+b[/latex], уравнение упрощается до [latex]f\left(x\right)=b[/latex]. Другими словами, значение функции является константой. Этот график представляет функцию [латекс]f\left(x\right)=2[/латекс].


Рис. 13. Горизонтальная линия, представляющая функцию [latex]f\left(x\right)=2[/latex].

M равно изменению выхода, деленному на изменение входа. Числитель - ненулевое действительное число, а изменение входа равно нулю.

Вертикальная линия указывает на ввод константы или значение x. Мы видим, что входное значение для каждой точки на линии равно 2, но выходное значение меняется. Поскольку это входное значение сопоставляется более чем с одним выходным значением, вертикальная линия не представляет функцию. Обратите внимание, что между любыми двумя точками изменение входных значений равно нулю. В формуле наклона знаменатель будет равен нулю, поэтому наклон вертикальной линии не определен.

Обратите внимание, что вертикальная линия, такая как на рис. 15, имеет точку пересечения x, но не имеет точки пересечения y-, если это не линия x. = 0. Этот график представляет линию x = 2.


Рис. 15. Вертикальная линия x = 2, которая не представляет функцию.

Общее примечание: горизонтальные и вертикальные линии

Линии могут быть горизонтальными или вертикальными.

Горизонтальная линия – это линия, определяемая уравнением в форме [латекс]f\left(x\right)=b[/latex].

Вертикальная линия – это линия, определяемая уравнением в форме [латекс]х=а[/латекс].

Пример 6. Написание уравнения горизонтальной линии

Напишите уравнение линии, изображенной на рисунке 16.

График x = 7.

Решение

Для любого значения x значение y равно –4, поэтому уравнение y = –4.

Читайте также: