русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


ЛАБОРАТОРНА РОБОТА 4


Дата додавання: 2014-11-27; переглядів: 800.


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

 

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

 

Модуль 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 End
Home Down
Up PgDown
PgUp Ins
Left Del
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. Організувати (якщо є необхідність) перегляд з можливістю прокрутки інформації у вікні.

 

 


<== попередня лекція | наступна лекція ==>
ЛАБОРАТОРНА РОБОТА 3 | ЛАБОРАТОРНА РОБОТА 5


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн