Ввод с клавиатуры
Lazarus IDE: Основы программирования в Windows
Несмотря на то, что всё потихоньку уходит в сеть, программирование для настольных компьютеров остаётся востребованным. И будет таковым ещё долго. Ну а самая распространённая операционная система для настольных компьютеров – это по-прежнему Windows. Поэтому любой программист, даже если он собирается стать веб-разработчиком, должен знать хотя бы основы создания программ для Windows. Подробнее... |
Ввод с клавиатуры используется наиболее часто, потому что практически в любой программе нужно получать от пользователя какие-то данные.
В этой статье мы будем рассматривать только ввод с клавиатуры. Ввод данных с других устройств - это уже более сложная тема, которую начинающим можно пока и не изучать.
Чтобы получить какие-либо данные от пользователя, в частности, данные, которые пользователь вводит с клавиатуры, в любом языке программирования используются стандартные функции ввода-вывода. Одну из функций Паскаля вы уже знаете: это функция ReadLn. Точнее, в Паскале это процедура, но это в данном случае не так важно.
Процедура ReadLn читает одно или несколько значений из файла или стандартного устройства ввода данных. В нашем случае это будет клавиатура, но вообще это может быть и другое устройство, например, COM-порт компьютера.
Процедура ReadLn после прочтения данных из файла переводит указатель файла на новую строку. Если в этом нет необходимости, то можно использовать процедуру Read, которая выполняет аналогичные действия, но не переводит указатель файла на новую строку. Синтаксис процедуры Read следующий:
procedure Read(var Файл; Параметры);
если выполняется чтение из стандартного устройства ввода (например, с клавиатуры), то файл не указывается:
procedure Read(Параметры);
Файл - это файловая переменная.
Параметры - это одна или несколько переменных, которые могут иметь тип данных Char, Integer, Real или String.
Если в качестве параметров передаются несколько переменных, то они должны быть одного типа. Каждое значение пользователь должен вводить через пробел. Это не является интуитивно понятным, поэтому использовать несколько параметров без крайней необходимости я не рекомендую.
Работу с файлами мы уже изучали, поэтому здесь описывать работу с файлами я не буду.
Есть ещё две стандартных подпрограммы, которые могут вам пригодиться при создании консольных приложений.
Первая называется KeyPressed и объявлена в модуле CRT следующим образом:
function KeyPressed : boolean;
Она ожидает нажатия любой клавиши на клавиатуре. Если клавиша нажата, то функция возвращает TRUE. Иначе FALSE. Например, следующий код
repeat WriteLn('Press any key...'); until KeyPressed;
будет выводить строку 'Press any key...' до тех пор, пока пользователь не нажмёт какую-нибудь клавишу.
Очень часто возникает необходимость знать, какую именно клавишу нажал пользователь. Сделать это можно с помощью функции ReadKey, которая также объявлена в модуле CRT:
function ReadKey : Char;
Эта функция возвращает ASCII-код клавиши, которую нажал пользователь. Если пользователь нажал дополнительную или функциональную клавишу, то эта функция возвращает #0. Чтобы узнать код дополнительной или функциональной клавиши, нужно вызвать функцию ещё ReadKey раз.
Всё это вы поймёте из примера, который приведён ниже.
program kb; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes, CRT //Подключить этот модуль!!! { you can add units after this }; var Q, E : Char; begin WriteLn('ESC - Выход. Нажмите любую клавишу...'); repeat Q := ReadKey; //Читаем код нажатой клавиши case Q of //Если это функциональная клавиша #0 : begin E := ReadKey; //то читаем расширенный код case E of #45 : WriteLn('ALT + X'); #59 : WriteLn('F1'); #60 : WriteLn('F2'); else WriteLn('Unknow key. Code: ', Ord(E)); end; end; #9 : WriteLn('TAB'); #13 : WriteLn('ENTER'); #32 : WriteLn('SPACE'); else WriteLn('Unknow key. Code: ', Ord(Q)); end; until Q = #27; end.
Надеюсь, что у вас уже достаточно знаний, чтобы разобраться в этом коде. Ну а если вам что-то непонятно, то это может быть только по двум причинам: 1) вы случайно попали на эту страницу, 2) вы пропустили предыдущие уроки. Если это так, то начинайте сначала здесь: ОСНОВЫ ПРОГРАММИРОВАНИЯ.
Обратите внимание на подключение модуля CRT в начале программы. Модули мы с вами пока не изучали, поэтому просто повторите этот код. Если не подключить модуль CRT, то функции ReadKey и KeyPressed не будут работать.
С помощью рассмотренных в этой статье функций можно создать уже вполне приличную и вполне удобную для пользователя программу. Так что, несмотря на то, что сегодня “рулят” оконные приложения, советую изучить вам этот материал. В жизни пригодится...