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

Лабораторна робота 4

Тема: Створення та відлагодження програм роботи з вікнами та вивід в них тексту у текстовому режимі, обробка клавіатури

Теоретичні відомості щодо виконання лабораторної роботи

Модуль Crt містить константи, змінні, підпрограми для управління екраном у текстовому режимі. Для підключення модуля достатньо вказати його назву в розділі Uses, а саме:

Uses Crt;.

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

Режим роботи дисплея призначається процедурою TextMode(<режим>). Режим задається за допомогою або ім’ям константи, або його номером, наприклад процедура TextMode(СО80); чи рівноцінна її TextMode(2); встановлять кольоровий режим 80х25 .

Процедура ClrScr - очищує екран і встановлює курсор у верхній лівий кут.

Призначити колір символу та фону можна за допомогою відповідних процедур

TextColor(<колір>) та TextBackGround(<колір>),

де <колір> - вказує на одну із заздалегідь описаних констант (для символів діапазон номерів кольорів 0-15, а для фону - 0-7), як словесними, так й їх числовим еквівалентом:

Black = 0;

Magenta = 5;

DarkGray = 8;

IightRed = 12;

Blue = 1;

Red = 4;

IightBlue = 9;

IightMagenta = 13;

Green = 2;

Brown = 6;

IightGreen = 10;

Yellow = 14;

Cyan = 3;

IightGray = 7;

IightCyan = 11;

White = 15;

Миготіння символу позначається константою Blink = 128. Треба розуміти, що назва кольорів деякою мірою умовна, реальний колір буде залежати від характеристик дисплею.

В модулі описано змінну TextAttr, яка вміщує в собі поточні атрибути текстових даних. Можна описати цю змінну для призначення атрибутів тексту, наприклад:

TextAttr := 14+16*2; {або TextAttr := Yellow+16*Green;}

Тепер будуть виводитись жовті символи на зеленому фоні. Треба звернути увагу на те, що код кольору фону помножується на 16 для того, щоб виставити його у відповідну позицію байту.

Щоб визначити режим миготіння, треба додати число 128 (або Blink), наприклад:

TextAttr := 14+16*2+128;

Процедура HighVideo - встановлює підвищену інтенсивність свічення символів.

Процедура LowVideo - встановлює знижену інтенсивність свічення символів.

Процедура NormVideo - переводить інтенсивність свічення символів у вихідний стан.

Процедура GotoXY(x, y) - переведення курсору в позицію, що задана координатами x (стовпчик) і y (рядок).

П р и к л а д

TextBackGround(Green),

TextColor(Yellow);

ClrScr;

GotoXY(33, 4);

Write('Цей надпис виводиться жовтими літерами на зеленому функції');

Процедура ClrEol - стирає всі символи в рядку, починаючи з поточної позиції курсору до кінця рядка.

Процедура DelLine - повністю стирає вміст рядка, в якому міститься курсор; усі рядки, що були нижче, переміщуються на один рядок вверх.

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

Функції WhereX і WhereY дозволяють визначити поточні значення координат курсору, відповідно або х-, або y-координату.

Процедура Window(x1,y1,x2,y2) - визначає вікно з координатами (x1,y1) верхнього лівого кута і (x2,y2) - нижнього правого кута.

Після виконання процедури Window відлік рядків і стовпців для позиціювання курсору призводиться у координатах поточного вікна, і позиція (1,1) - це лівий верхній кут вікна.

На екрані можуть знаходитися декілька вікон, але у кожний окремий момент часу активним може бути тільки одне вікно. Процедури Write(Ln), Read(Ln), Window, GotoXY, WhereX, WhereY, ClrScr виконують відповідні їх призначенню дії відносно активного (поточного) вікна.

Процедура Sound(<частота>) - запускає динамік, частота звуку задається в герцах.

Процедура NoSound - зупиняє динамік.

Процедура Delay(<час>) - установлює затримку виконання програми у мілісекундах.

Функція ReadKey зчитує символ з клавіатури (при натисненні) й повертає значення типу Char, при цьому символ на екран не виводиться.

Функція KeyPressed повертає значення True, якщо була затиснена будь-яка клавіша і False в протилежному випадку.

При натисненні на будь-яку клавішу виробляється унікальний код - код сканування (скен-код). Цифрові та символьні клавіші мають простий скен-код (стандарт ASCII-код 0-255), а функціональні, спеціальні та комбінації клавіш мають складний код (у таблиці 4.1 наведені коди клавіш, які найчастіше використовуються), який складається з двох частин :#0 - ознака функціональної, спеціальної або комбінації клавіш; #N- власне сам код.

Символи ASCII-коду, які мають код у діапазоні 178-223, називаються символами псевдографіки і звичайно використовуються при розробці підпрограм заставки до програми, обрамлення вікон та створення їх тіней.

П р и к л а д

Program ASCII;

{Вивід значень символів та відповідних їм кодів}

Uses Crt;

Var i: Integer;

Begin

ClrScr;

For i:=178 to 223 do

Begin

Write(' i=',i,' : ',Chr(i));

If i mod 6=0 Then WriteLn;

End;

End.

Таблиця 4.1

Код

Клавіша

Код

Клавіша

59..68

F1..F10

79

End

71

Home

80

Down

72

Up

81

PgDown

73

PgUp

82

Ins

75

Left

83

Del

77

Right

П р и к л а д. Приклад демонстраційної програми, що входить у комплект поставки системи Turbo Pascal з деякими скороченнями.

Program CrtDemo;

{Приклад демонстраційної програми з деякими скороченнями}

Uses Crt;

Var

LastCol, {останній стовпчик}

LastRow: Word; {останній рядок}

ch: Char;

done: Boolean;

Procedure Initialize;

{Процедура режиму керування}

Begin

{функції Lo і Hi виділяють відповідно молодший і старший байти}

ClrScr;

LastCol:=Lo(WindMax)+1; {номер останнього стовпчика}

LastRow:=Hi(WindMax)+1; {номер останнього рядка}

GotoXY(1,LastRow); {курсор - у першу позицію останнього рядка}

TextBackGround(Black);

TextColor(White);

ClrEol; {очищення рядка}

Write(' Ins-InsLine ',' Del-DelLine ',#27#24#25#26'-Cursor ',

'Alt-W-Window ', {виводить вікно на екран}

'Alt-R-Random ', {виводить випадковий текст}

'Esc-Exit'); {вихід з програми}

Dec(LastRow,80 div LastCol);{зменшити значення 1-го параметру

на величину іншого}

Randomize;

End;{Initialize}

{-------------------------------------------------------------------------------------}

Procedure MakeWindow;

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

Var

x,y,

Width,Height:Word; {ширина і висота вікна}

Begin

Width:=Random(LastCol-2)+2; {генерація ширини,}

Height:=Random(LastRow)+2; {висоти}

x:=Random(LastCol-Width)+1; {та координат (x,y) лівого}

y:=Random(LastRow-Height)+1; {верхнього кута вікна}

Window(x,y,x+Width,y+Height);

Window(x+1,y+1,x+Width-1,y+Height-1);

TextBackGround(Random(8));TextColor(Random(7)+9);ClrScr;

End;{MakeWindow}

{--------------------------------------------------------------------------------------}

Procedure RandomText;

Begin

Repeat

Write(Chr(Random(256-32)+32));{вивід випадкового символу}

Until KeyPressed;

End;{RandomText}

Begin

Initialize;

MakeWindow;

done:=False; {керування циклами}

Repeat

ch:=ReadKey;

Case ch of

#0:Begin {розширений код клавіші}

ch:=ReadKey;

Case ch of

#17:MakeWindow; {Alt-W}

#19:RandomText; {Alt-R}

#45:done:=True; {Alt-X}

#72:GotoXY(WhereX,WhereY-1); {Up}

#75:GotoXY(WhereX-1,WhereY); {Left}

#77:GotoXY(WhereX+1,WhereY); {Right}

#80:GotoXY(WhereX,WhereY+1); {Down}

#82:InsLine; {Ins}

#83:DelLine; {Del}

End;

End;

#3,#27:done:=True; {Ctrl-C, Esc}

#13:WriteLn; {Enter}

Else Write(ch);

End;

Until done;

End.

Контрольні питання

  1. Для чого призначена відеопам’ять?

  2. Як зафарбувати вікно на екрані в текстовому режимі?

  3. Назвіть особливості роботи з вікнами в текстовому режимі.

Завдання та пояснення щодо виконання лабораторної роботи

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

Програма повинна містити:

  1. Роботу з вікнами (їх обрамлення рамками) та кольорами для введення, виведення в них інформації та її корегування.

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