В данном разделе приведен текст процедур, позволяющих оформить диалог пользователя с прикладной программой в текстовом режиме.
Процедура Colors предназначена для установки цвета символов и фона. Ее удобно использовать, если на экран выводится несколько элементов с разным цветовым оформлением.
Процедура Shadow закрашивает прямоугольную область экрана, определяемую координатами верхней левой (x1,y1) и нижней правой (x2,y2) точек, заданным цветом фона cv2 и устанавливает цвет символов cv1 для последующего вывода информации в эту область.
x1 x2
y1
y1
Эффект тени:
Shadow(x1+1, y1+1, x2+1, y2+1, cv1, 0);
Shadow(x1, y1, x2, y2, cv1,cv2);
Процедура Single ограничивает прямоугольную область экрана (x1,y1)- (x2,y2) рамкой, составленной из символов линий псевдографики.
Program Dialog;
{оформление диалога в текстовом режиме }
Uses Crt;
Var
a,f : real;
Procedure Colors(cv1, cv2: byte);
{----- установка цвета символов (cv1) и цвета фона (cv2)
в текстовом режиме-----}
begin
TextColor(cv1);
TextBackGround(cv2);
end; {Colors}
Procedure Shadow(x1, y1, x2, y2, cv1,cv2: byte);
{------------заполнение цветом прямоугольного участка экрана}
Var
i: byte;
begin
Colors(cv1, cv2);
For i:=y1 to y2 do
begin
GotoXY(x1,i); Write(‘ ‘:x2-x1+1);
end;
end; {Shadow}
Procedure Single(x1, y1, x2, y2, cv1, cv2: byte);
{выделение цветом и рамкой прямоугольной области экрана}
const
s1= #218; s2= #196; s3= #191;
s4= #179; s5= #192; s6= #217;
var
i: byte;
begin
Colors(cv1, cv2);
Shadow(x1+1, y1+1, x2+1, y2+1, cv1,0);
Shadow(x1,y1,x2,y2,cv1,cv2);
GotoXY(x1,y1);
Write(s1);
For i:= x1+1 to x2-1 do
write(s2);
write(s3);
For i:=y1+1 to y2-1 do
begin
GotoXY(x1,i); Write(s4);
GotoXY(x2,i); Write(s4);
end;
GotoXY(x1,y2);
Write(s5);
For i:=x1+1 to x2-1 do
write(s2);
write(s6);
end; {Single}
{----- Пpимеp использования пpоцедуp ------}
Begin
Colors(11,1); {основные цвета}
ClrScr;
{ -- офоpмление ввода данных}
Single(25, 8, 55, 14, 10, 3);
GotoXY(29, 9);
Write('Вычисление синуса числа');
GotoXY(30, 10);
Write('Ввод исходных данных:');
GotoXY(32, 12);
Write('Аpгумент = ');
Readln(a);
{ -- очистка экpана для следующего этапа}
Shadow(25, 8, 56, 15, 10, 1);
Delay(600);
{ -- вычисления}
f:=sin(a);
{ -- офоpмление вывода pезультатов}
Single(25, 8, 55, 14, 14, 5);
GotoXY(30, 9);
Write('Результаты вычислений:');
GotoXY(32, 11);
Write('Аpгумент = ',a:8:5);
GotoXY(32, 12);
Write('Синус = ', f:8:5);
readln;
{ -- очистка экpана для следующего этапа}
Shadow(25,8,56,15,10,1);
{ -- завеpшение pаботы}
Shadow(25,8,55,14,15,7);
GotoXY(30,10);
Write('Завеpшение pаботы..');
Delay(1000);
end.
Организация запроса на продолжение работы в программе:
Function Answer (x1, y1: byte): boolean;
var
ch: char;
begin
Gotoxy(x1,y1);
Writeln('Продолжить работу ?');
Write('Да/Нет или Yes/No');
Repeat
Readln(ch);
Case ch of
'Д', 'д', 'Y' ,'y': Answer:=True;
'Н', 'н', 'N', 'n':Answer:=False;
end;
until ch in ['Y', 'y', 'Д', 'д'];
end;
В программе:
. . .
work:=Answer(10,5);
if work=true then write ('Продолжить ?')
else writeln ('Работа завершена');
Упражнения
1) Hабpать и выполнить пpиведенную пpогpамму, использующую элементы офоpмления диалога в текстовом pежиме.
2) Создать свою пpогpамму так, чтобы в ней было организовано решение новой задачи (условие взять у преподавателя) с использованием средств оформления диалога. Заставка должна содержать словесную формулировку задачи в выделенной прямоугольной области.
3) На основе процедуры Single разработать еще одну процедуру с именем Double, рисующую рамку двойными линиями псевдографики (использовать символы псевдографики с кодами s1= #201; s2= #205; s3= #187; s4= #186; s5= #200; s6= #188). Использовать процедуру Double при оформлении программы п.2.
4) Разработать процедуру, в зависимости от значения параметра style рисующую рамку одинарными или двойными линиями псевдографики. Необходимые символы хранить в двумерном символьном массиве.
5) Составить процедуру, которая строит заставку к программе с помощью последовательности вложенных друг в друга рамок разного цвета
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.