При завершенні роботи програми, яка використовує вікна, відбувається автоматичне відновлення параметрів текстового режиму, встановлених перед запуском програми, і поточним вікном стає весь екран. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

При завершенні роботи програми, яка використовує вікна, відбувається автоматичне відновлення параметрів текстового режиму, встановлених перед запуском програми, і поточним вікном стає весь екран.



Для отримання координат поточного вікна використовується оголошення в модулі змінних WindMin і WindMax, які мають тип WORD і містять інформацію про розмір поточного вікна. Оскільки максимальні значення координат X і Y текстових вікон не перевищують 255, тобто можуть зберігатися в одному байті, то в кожній зі змінних зберігаються координати X і Y в молодшому і старшому байтах відповідно. Отримати значення X і Y можна, використовуючи стандартні функції Lo і Hi, наступним чином:

X1:=Lo (WindMin) +1; X2:=Lo (WindMax) +1;

Y1:=Hi (WindMin) +1; Y2:=Hi (WindMax) +1;

Де X1, Y1, X2, Y2 – координати поточного вікна. Одиниця добавляється через те, що змінні WindMin і WindMax містять абсолютні координати, які рахуються від позиції (0,0), в той час як початок екранних координат являється (1,1).

Дуже часто при роботі з вікнами застосовується процедура ClrScr, яка не має параметрів. Вона застосовується або для очищення поточного вікна, встановленого процедурою Window, або, якщо вікно не використовується, для очищення всього екрану. При цьому вікно (чи екран) зафарбовується поточним кольором фону. Також, як і для процедури Window, після виконання ClrScr курсор стає в позицію з координатами (1,1).

Для задання різних текстових режимів виводу інформації застосовується процедура

TextMode (Mode: WORD);

Нижче заданий список констант текстових режимів модуля:

ім'я константи значення розширення екрану кольоровий режим
BW40   40 х 25 чорно-білий для кольорового адаптера
CO40 чи C40   40 х 25 кольоровий
BW80   80 х 25 чорно-білий для кольорового адаптера
CO80 чи C80   80 х 25 Кольоровий
Mono   80 х 25 монохромний для адаптерів MDA і Hercules
Font8x8   80/40 х 43 кольоровий для адаптера EGA
    80/40 х 50 кольоровий для адаптера VGA

В якості параметрів процедури TextMode можна задати як імена наведених вище констант, так і їх числові еквіваленти. Якщо в якості параметрів вказати число, не еквівалентне ні одній з наведених констант, то буде встановлений режим CO80 чи Mono (для монохромних адаптерів).

Константа Font8x8 використовується в адаптерах EGA і VGAі вмикає текстові режими, в яких замість стандартних шрифтів з матрицями 8х14 і 8х16 підключаються шрифти з матрицею 8х8,що дає збільшення числа рядків до 43 (EGA) чи 50 (VGA). Ця константа не є самостійною, тобто вона повинна добавлятися до вибраного коду режиму, наприклад:

TextMode (C40+Font8x8);

В цьому випадку встановиться кольоровий режим С40, але кількість рядків буде не 25, а 43 чи 50. якщо основний режим не заданий, по замовчуванню мається на увазі режим BW40.

Крім заміни текстового режиму, команда TextMode виконує ряд додаткових дій в наступній послідовності:

ü Поточне вікно встановлюється рівним всьому екрану.

ü Встановлюється режим прямого запису в відеопам’ять (змінній DirectVideo присвоюється значення True).

ü Вимикається режим контролю „снігу” (змінній CheckSnow присвоюється значення False).

ü Встановлюється режим нормальної яскравості символів.

ü Проходить очищення екрану.

ü В змінній LastMode запам’ятовується наступний встановлений режим.

Далі з допомогою змінної LastMode можна відновити останній використовуваний текстовий режим.

Змінні CheckSnow і DirectVideo встановлюють специфічні для модуля Crt режими контролю „снігу” і прямого відображення у відеопам’ять.

Режим контролю „снігу” використовується тільки для відео-адаптерів типу CGA. „Снігом” називають білі штрихи, які з’являються при виводі інформації на екран. Це відбувається через те, що символи записуються у відеопам’ять не під час горизонтальної розгортки променя ЕЛТ. При використанні відеоадаптерів інших типів цей ефект не спостерігається.

Коли встановлюється кольоровий текстовий режим, змінна CheckSnow стає рівною True, і прямий запис у відеопам’ять буде проходити тільки під час горизонтальної розгортки променя. При використанні більш нових моніторів CGA має сенс на початку програми встановлювати змінну CheckSnow у False, так як ефект „снігу” в них відсутній і заборона перевірки значно прискорить вивід текстової інформації на екран.

Режим прямого запису у відеопам’ять встановлюється автоматично при підключені модуля Crt і визначає спосіб запису інформації при виконані процедур Write і WriteLn.

По замовчуванню значення змінної DirectVideo рівне True. Таке ж значення цієї змінної встановлюється після кожного виклику процедури TextMode. При цьому вивід інформації на екран відбувається дещо швидше. Якщо значення змінної DirectVideo рівне False, то вивід на екран проходить повільніше.

Значення змінної DirectVideo впливає на дію змінної CheckSnow. Якщо перша рівна False, то значення CheckSnow ігнорується.

ПРОЦЕДУРИ І ФУНКЦІЇ УПРАВЛІННЯ КУРСОРОМ

Для управління положенням курсору в модулі Crt використовується процедура GotoXY і функції WhereX і WhereY.

Процедура

GotoXY (X, Y: WORD);

Переміщує курсор в позицію поточного вікна з відповідними координатами (X,Y), при цьому позиція (1,1) відповідає верхньому лівому куту вікна. Ця процедура впливає на процедури Write і WriteLn, які будучи використаними після неї, будуть здійснювати вивід символів, починаючи з позиції з вказаними координатами.

Якщо значення будь-якого з параметрів X чи Y буде некоректним (наприклад перевищить розмір вікна), то виклик процедури GotoXY буде проігнорований.

Нижче наведений досить корисний приклад використання процедури GotoXY, який демонструє можливість контролю операцій вводу типізованих змінних, особливо змінних цілочислових типів. Функція IOResult являється стандартною і описана в модулі System. Ця функція повертає стан останньої виконаної операції вводу-виводу. Вона застосовується разом з директивою компілятора {$I-}, яка вимикає автоматичний контроль операцій вводу-виводу і передає інформацію безпосередньо у функцію IOResult. Якщо ця директива не використовується, то неправильний ввід даних призведе до виникнення помилки виконання, яка перерве виконання програми. Використання функції IOResult дозволяє самостійно обробляти такого роду помилки.

{використання процедури GotoXY}

USES Crt;

VAR

Number: WORD;

Flag: BOOLEAN;

BEGIN

ClrScr; {очищення екрану}

Flag: = False;

{$I-} {вимкнення контролю операцій вводу-виводу}

REPEAT

ClrEOL; {попереднє очищення рядка}

Write (‘Введіть число:’);

Read (Number); {ввід числа}

IF IOResult=0 THEN Flag: = True {якщо введене число типу WORD}

ELSE GotoXY (1, WhereY-1);

UNTIL Flag;

{$I+} {вмикання контролю операцій вводу-виводу}

WriteLn;

WriteLn (‘правильний ввід’);

Delay (1000);

END.

Для визначення координат місцезнаходження курсору в модулі Crt використовуються функції

WhereX: WORD;

і

WhereY: WORD;

Результатом будуть, відповідно, координати X і Y поточного вікна. Ці функції часто застосовуються для того, щоб не вказувати конкретні координати місцезнаходження курсору і зробити програму більш універсальною.

ПРОЦЕДУРИ РОБОТИ З РЯДКАМИ

Для роботи з рядками в модулі Crt використовуються процедури ClrEOL, InsLine і DelLine.

Процедура ClrEOL видаляє символи в рядку від поточної позиції курсору до правої границі поточного вікна. Видалені символи замінюються пропусками, тобто рядок очищується. Колір рядка визначається поточним кольором курсору.

Процедури InsLine і DelLine застосовуються для управління „прокруткою”, яка вже згадувалася. InsLine вставляє пустий рядок на місце рядка, визначеному поточним місцезнаходженням курсору. Всі рядки, які розташовані нижче, послідовно переміщуються вниз на одну позицію, а самий нижчий рядок видаляється з екрану.

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

ФУНКЦІЇ ДОПИТУ КЛАВІАТУРИ

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

Функція

KeyPressed: BOOLEAN;

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

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

IF KeyPressed THEN...;



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 259; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.241.82 (0.013 с.)