Ілюстрований самовчитель паскаль он-лайн

Он-лайн самовчитель Паскаль

Текстовий висновок на екран

Бібліотека Turbo Vision здатна задовольнити найвищим вимогам і я настійно рекомендую звертатися до неї при програмуванні складних текстових зображень (меню, вікон і т.п.). Проте цілком можливо, що деякі з читачів захочуть використовувати значно простіші, але досить ефективні засоби модуля CRT, описувані в цьому розділі.

Що використовується в ПК пристрій візуального відображення інформації - дисплей -складається з двох основних частин: монітора, що містить екран (електронно-променеву трубку або рідкокристалічну панель) з необхідними компонентами (пристроями розгортки зображення), і блоку управління, який частіше називають дисплейним адаптером або просто адаптером . Зазвичай обидва пристрої узгоджуються один з одним, але в окремих випадках цього узгодження може не бути (наприклад, кольоровий монітор може працювати з монохромним адаптером і навпаки). Будемо вважати обидва пристрої узгодженими, тому, говорячи про різні дисплеях, я буду говорити тільки про різні адаптери, так як саме в них зосереджені основні відмінності дисплеїв один від одного.

Історично першим адаптером (1981 р), використаним на IBM PC, був так званий монохромний адаптер (MDA). Його можливості дуже скромні: він дозволяв виводити тільки текстові повідомлення в одному з двох форматів - 25 рядків по 40 або по 80 символів в рядку. Символи виводилися в прямому зображенні (світлі символи на темному тлі), причому їх ширина залишалася однаковою в обох режимах, тому при виведенні в режимі 40x25 використовувалася тільки ліва половина екрану. В MDA застосовувалися два символьних шрифту - звичайний і з підкресленням.

У 1982 році фірма Hercules випустила адаптер HGC (від англ. Hercules Graphics Card - графічна карта Геркулес), який повністю емулювати MDA в текстовому режимі, але на відміну від нього міг ще відтворювати і графічні зображення з роздільною здатністю 720x350 точок (пікселів).

Приблизно в цей же час IBM випустила кольоровий графічний адаптер CGA (Color Graphics Adapter) і вперше на екрані ПК з'явився колір. CGA дозволяв виводити як текстові повідомлення, так і графічні зображення (з дозволом 320x200 або 640x200 пікселів). У текстовому режимі виводилися 40x25 або 80x25 символів як в монохромному, так і в кольоровому зображенні. При використанні монохромного режиму символи, на відміну від MDA, не могли підкреслено, зате їх можна було

виводити в негативному зображенні (чорні символи на світлому тлі). При виведенні в кольоровому режимі використовувалося 16 кольорів для символів і 8 - для навколишнього їх фону.

Текстові можливості CGA стали стандартом де-факто і підтримуються у всіх наступних розробках IBM - адаптерах EGA, MCGA, VGA і SVGA. Можливості модуля CRT розглядаються стосовно адаптерів цього типу.

Використовується для завдання одного з можливих текстових режимів роботи адаптера. Тема процедури:

Procedure TextMode (Mode: Word);

Тут Mode - код текстового режиму. Як значення цього виразу можуть використовуватися такі константи, визначені в модулі CRT:

Font8x8 = 256

або 80х50 з адаптерами EGA іліVGA>

Код режиму, встановленого за допомогою виклику процедури TextMode, запам'ятовується в глобальній змінній LastMode модуля CRT і може використовуватися для відновлення початкового стану екрану.

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

Procedure Print (S: String);

(Виводить повідомлення S і чекає ініціативи користувача>

WriteLn ( 'Натисніть Enter.');

Зверніть увагу на останній оператор WriteLn: якщо його прибрати, режим мерехтіння символів збережеться після завершення програми, незважаючи на те, що перед ним стоїть оператор

Справа в тому, що всі колірні визначення попередньо заносяться в спеціальну змінну TextAttr модуля CRT і використовуються для настройки адаптера тільки при зверненні до процедур Write / WriteLn.

Очищає екран або вікно (див. Нижче процедуру Window). Після звернення до неї екран (вікно) заповнюється кольором фону і курсор встановлюється в його лівий верхній кут. наприклад:

WriteLn ( 'Натисніть будь-яку клавішу.');

Визначає текстове вікно - область екрану, яка в подальшому буде розглядатися процедурами виведення як весь екран. Відразу після виклику процедури курсор поміщається в лівий верхній кут вікна, а саме вікно очищається (заповнюється кольором фону). У міру виведення курсор, як зазвичай, зміщується вправо і при досягненні правої межі вікна переходить на новий рядок, а якщо він до цього моменту знаходився на останньому рядку, вміст вікна зсувається вгору на один рядок, тобто здійснюється «прокрутка» вікна. Тема процедури:

Procedure Window (XI, Y1, X2, Y2: Byte);

ЗдесьX1. Y2 - координати лівого верхнього (XI, Y1) і правого нижнього (X2, Y2) кутів вікна. Вони задаються в координатах екрану, причому лівий верхній кут екрану має координати (1,1), горизонтальна координата збільшується зліва направо, а вертикальна - зверху вниз.

У наступному прикладі ілюструється висновок досить довгого повідомлення в двох різних вікнах.

for k: = 1 to 100 do

Write ( 'Натисніть Enter.');

for k: = 1 to 100 do

Write ( 'Натисніть Enter.');

Звернення до процедури Window ігнорується, якщо будь-яка з координат виходить за межі екрану або якщо порушується одна з умов: Х2> Х1 і Y2> Y1. Кожне нове звернення до Window скасовує попереднє визначення вікна. Межі поточного вікна запам'ятовуються в двох глобальних змінних модуля CRT: змінна WindMin типу Word зберігає X1 і Y1 (XI - в молодшому байті), а змінна того ж типу WindMax - Х2 і Y2 (X2 - в молодшому байті). При бажанні Ви можете змінювати їх потрібним чином без звернення до Window. Наприклад, замість оператора

можна було б використовувати два оператора

WindMin: = 39+ (1 shl 8);

WindMax: = 69+ (16 shl 8);

(На відміну від звернення до Window координати, що зберігаються в змінних WindMin і WindMax, відповідають початку відліку 0,0).

Перекладає курсор в потрібне місце екрану або поточного вікна. Тема процедури:

Procedure GotoXY (X, Y: Byte);

Тут X, Y - нові координати курсору. Координати задаються щодо меж екрану (вікна), тобто оператор

означає вказівку перевести курсор в лівий верхній кут екрану (або вікна, якщо до цього моменту на екрані визначено вікно). Звернення до процедури ігнорується, якщо нові координати виходять за межі екрану (вікна).

Функції whereX і WhereY.

За допомогою цих функцій типу Byte можна визначити поточні координати курсору: WhereX повертає його горизонтальну, a WhereY - вертикальну координати.

У наступній програмі спочатку в центрі екрану створюється вікно, яке обводиться рамкою, потім у вікні виводиться таблиця з двох колонок.

Стирає частину рядка від поточного положення курсору до правої межі вікна (екрана). Положення курсору не змінюється.

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

Вставляє рядок: рядок з курсором і всі рядки нижче її зсуваються вниз на один рядок; рядок, що вийшла за нижню межу вікна (екрана), безповоротно втрачається; поточне положення курсору не змінюється.

Процедури LowVideo, NormVideo і HighVideo.

За допомогою цих процедур без параметрів можна встановлювати відповідно знижену, нормальну і підвищену яскравість символів. наприклад:

Зауважу, що на практиці немає різниці між зниженою і нормальною яскравістю зображення.

Procedure AssignCRT (F: Text);

література

Схожі статті