Он-лайн самовчитель Паскаль
Текстовий висновок на екран
Бібліотека 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);