Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
98
Добавлен:
04.03.2014
Размер:
593.92 Кб
Скачать

Var X,y,I: byte;

Begin

NormVideo;

ClrScr;

for I:=1 to 40 do

begin

X:= Succ(Random(80));

Y:= Succ(Random(25));

Window (X, Y, X+Random(20), Y+Random(8));

TextBackGround(Random(8));

ClrScr;

Write(‘Вывод в окно’, ^G,I:); { ^G - подает звуковой сигнал}

Delay(300);

end

End.

Программа последовательно генерирует 40 окон, границы и фон выбирается случайным образом. В каждое окно выводится сообщение. Необходимо помнить, что Crt поддерживает только текущее окно, информация из предыдущих окон теряется для пользователя, если он сам об этом не позаботиться.

Для сохранения координат окон можно воспользоваться следующей структурой:

Type WinRecord – record

XUpLeft;

YUpLeft;

XLowRight;

YLowRight: byte;

end;

const MaxWin = 10;

Var WinMas: array[1..MaxWin] of WinRecord;

При включении данного фрагмента в пользовательскую программу можно сохранять координаты и устанавливать до 10 различных окон вывода.

Окна часто используются в программах для скроллинга (прокрутки) текстовой информации. Этот процесс проще всего реализовать с помощью процедур InsLine и DelLine.

Пример 3.2.

Program DemoInsLine;

Uses Crt;

Var I: byte;

Begin

Window (20,6,60,15);

ClrScr;

for I:=1 to 10 write (‘Вывод в окно’);

for I:=1 to 5 do

begin

GotoXY(1,1);

InsLine;

write(‘Вставка строки’);

Delay(500);

end

End.

2. Демонстрационные примеры

Пример 3.3. Разработать вертикальное меню из четырех пунктов:

New, open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit».

При разработке алгоритма программы выделим 2 подпрограммы:

  • подпрограмму рисования пункта меню как окна с текстом внутри;

  • подпрограмму рисования меню с выделенным пунктом.

В процессе работы основная программа вводит коды клавиш и организует работу меню. После завершения работы такая программа должна восстановить стандартное окно 25х80 и стандартные цвета символа и фона MS DOS.

Program ex;

Uses crt;

Var npos,I: integer;

ch1,ch2: char;

Type

win = record {описываем тип окон пунктов меню}

x1,y1,x2,y2: word; {координаты окна}

text: string [8]; {название пункта меню}

end;

{описываем массив окон пунктов меню}

const menu: array [1..4] of win =

((x1:5; y1:4; x2:15; y2:4; text: ‘new’),

(x1:5; y1:5; x2:15; y2:5; text: ‘open’),

(x1:5; y1:6; x2:15; y2:6; text: ‘save’),

(x1:5; y1:7; x2:15; y2:7; text: ‘new’));

{процедура рисования пункта меню}

Procedure DrawWin (w: win; attr: byte);

Begin

With w do

Begin

TextAttr:= attr; {устанавливаем атрибут окна пункта}

Windows (x1,y1,x2,y2); {устанавливаем окно пункта}

Clrscr; {высвечиваем окно пункта}

GotoXY(2,1); {устанавливаем курсор}

Write(text); {выводим название пункта меню}

End;

End;

{процедура рисования меню с выделением пунктов npos}

procedure DrawMenu ( npos: integer);

begin

clrscr;

for i:=1 to 4 do

if i = npos then DrawWin (menu[i],94) {выводим выделенный пункт}

else DrawWin (menu [i],30); {выводим невыделенный пункт}

end;

{основная программа}

begin

npos:= 1; {выделенный пункт меню}

DrawMenu (npos); {выводим меню}

Repeat

Ch1:= ReadKey; if ch1=#0 then ch1:=ReadKey;

Case ch1 of

#0: case ch2 of

#72: begin {стрелка вверх}

if npos > 1 then {если не верхний пункт}

begin

DrawWin(menu[npos], 30); {убираем выделение текущего пункта меню}

Npos:=Npos - 1; {переходим к предыдущему пункту}

DrawWin(menu[Npos],90); {выделяем новый пункт}

End;

End;

#80: begin

if Npos <4 then {если не нижний пункт}

begin

DrawWin(menu[npos],30); {убираем выделение текущего пункта}

Npos:=npos+1; {переходим к следующему пункту}

DrawWin (menu[npos],94); {выделяем новый пункт}

End;

End;

End; {case интерпретации расширенного кода}

#13: begin

Window(1,1,80,25);

TextAttr:=7;

ClrScr; {очищаем экран}