Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programuv_good.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
990.21 Кб
Скачать

Функції допиту клавіатури

Для допиту вмісту буфера клавіатури в модулі Crt застосовуються функції ReadKey і KeyPressed.

Функція

KeyPressed: BOOLEAN;

повертає логічне значення True, якщо в буфері клавіатури міститься хоча б один символ, тобто була натиснута клавіша; і False, якщо буфер пустий, тобто натиснення клавіші не було. При запуску програми буфер очищується. Дані надходять в буфер при натисненні будь-якої клавіші на клавіатурі, за винятком клавіш [Ctrl], [Shift], [Alt], а також клавіш [NumLock], [CapsLock] і деяких інших, і зберігаються в ньому до тих пір, поки не будуть зчитані процедури чи функції вводу даних, або сам буфер не буде очищений програмно. Окремо, повністю очищають клавіатурний буфер процедури Read і ReadLn, а також операція Reset для файлів, зв’язаного з консоллю.

Слід пам’ятати про те, що функція KeyPressed повертає True не тільки при натисканні клавіші в даний момент часу. Наприклад, будь-яке натиснення клавіші, навіть не під час операції вводу, передає інформацію в буфер, хоч і не відображається на дисплеї. Тому послідовний виклик функції KeyPressed призведе до того, що вона буде приймати інформацію з буферу, коли, здавалось би, натиснення клавіші не відбувається. Тому перевірка стану натиснення клавіші оператором типу

IF KeyPressed THEN . . .;

може виявитися не зовсім коректною. Для цього необхідно функцію KeyPressed використовувати разом з функцією ReadKey. А найчастіше функція KeyPressed застосовується в конструкціях типу

REPEAT UNTIL KeyPressed;

які перевіряють натиснення клавіші під час виконання циклів.

На відмінну від процедур Read і ReadLn, які очищують весь буфер після звертання до нього, функція

ReadKey: CHAR;

зчитує з буфера і повертає в програму останній введений символ.

Буфер клавіатури організований у виді черги, тобто функція ReadKey при звернені до буфера зчитує (і, відповідно, видаляє) з нього найперший введений символ по принципу „перший прийшов – перший пішов”. Якщо буфер пустий, то функція призупиняє виконання програми і чекає натиснення клавіші. Символ, який відповідає нажатій клавіші, не відобразиться на екрані. Це називається „ввід без відлуння на екран”.

Для обробки даних вводу з клавіатури можна також використовувати спеціальні змінні модуля Crt: CheckBreak і CheckEOF.

Змінна CheckBreak задає режим перевірки використання комбінацій клавіш [Ctrl+Break] під час виконання операцій вводу-виводу буде перевіряти роботу програми. В решта випадках натиснення [Ctrl+Break] ніяк не буде впливати.

Якщо значення змінної CheckBreak рівне False, переривання роботи програми при натисненні комбінації клавіш [Ctrl+Break] стає неможливим.

Якщо на клавіатурі немає клавіші [Break], то її, найчастіше, замінює клавіша [ScrollLock], і, відповідно, комбінацією клавіш, яка здійснює переривання роботи програми, буде [Ctrl+ScrollLock].

Інша змінна CheckEOF, задає режим вводу з клавіатури ознаки кінця файлу (#26). Цей код записується в буфер при натисненні комбінації клавіш [Ctrl+Z].

По замовчуванню значення CheckEOF рівне False, при натисненні [Ctrl+Z] в кінець рядка буде записаний символ #26 і він не буде інтерпретований як ознака кінця файлу. Якщо встановити значення CheckEOF рівним True, то можна організувати ввід текстових файлів з клавіатури, закінчуючи їх ввід ознакою кінця файлу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]