Книжка Хабы (970988), страница 4
Текст из файла (страница 4)
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; {очищаем экран}
Case npos of
1: begin
Write (‘выполнен пункт ’, menu[npos].text);
Readln;
End;
2: begin
Write (‘выполнен пункт ’, menu[npos].text);
Readln;
End;
3: begin
Write (‘выполнен пункт ’, menu[npos].text);
Readln;
End;
End; {case}
DrawMenu (npos); {выводим меню}
End;
End; {case}
Until (ch1=#27) or (ch1=#13) and (npos=4));{код 27 соответствует клавише Esc}
Window(1,1,80,25); {код 13 соответствует клавише Enter}
TextAttr:=7;
ClrScr; {очищает экран}
End.
3.Задачи, для самостоятельного решения
Задача 1. Разработать программу исследования элементарных функций (y=sin x, y=cos x, e = tg x, e = ln x, e = eх), задаваемых пользователем. Обеспечить для каждой функции вывод таблицы значений на заданном интервале с заданным шагом, поиск корней и определение максимума и минимума. Взаимодействие пользователя и программы организуйте с использованием меню.
Задача 2. Разработать программу тестирования студентов обучающихся по теме «системы исчисления ». Тестируемому предлагаться 6 вопросов по данной теме, включая обычные вопросы с выбором ответа из нескольких и задачи на выполнение арифметических операций, когда необходимо ввести результат указанной операции. Вопросы должны случайным образом выбираться из списка, хранящегося в файле, и не повторяться. Для ответа на каждый вопрос дается две попытки. Предусмотреть, чтобы тестирующийся мог по желанию отказаться отвечать на данный вопрос и получить правильный вопрос. Оценку проводить по соотношению правильных и неправильных ответов.
Задача 3. Разработать вертикальное меню из четырех пунктов: new, open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit ».
Задача 4. Разработать вертикальное меню из четырех пунктов: new, open, save, exit. Окно меню желтого цвета, названия пунктов должны быть выведены красным цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit ».
Задача 5. Разработать программу, анализирующую файл, в котором размещены данные о пассажирах. Запись о пассажирах содержит следующие поля: Фамилия, количество вещей (мест), общий вес багажа. Программа позволяет сортировать пассажиров с максимальным весом багажа и максимальным количеством вещей. Создать меню со следующими пунктами: F1 =ввод данных, F2 – просмотр данных, F3 - выход.
Задача 6. Разработать вертикальное меню из 4-х пунктов: создать, открыть, сохранить, выход. Окна меню синего цвета, названия пунктов должны быть выделены желтым цветом фона. Реализовать выход по выбору пункта «Выход » или по нажатию клавиши «Esc ».
При разработке алгоритмов программы выделить 2 подпрограммы:
-
рисования пункта меню как окна с текстом внутри,
-
рисования меню с выделенным пунктом.
В процессе работы основная программа вводит коды клавиш и организует работу с меню. После завершения работы такая программа должна восстановить стандартное окно 25х80 и стандартные цвета символа и фона MS DOS.
Задача 7. Разработать программу по выводу в выделенном окне нажатие специальных клавиш (Home, End, Delete, Insert, PageUp, PageDown, CapsLock, NumLock, ScrollLock, Esc, Break, F1,F2,F3..F12) , используя меню. Обеспечить наглядность решаемых задач с помощью пользовательского интерфейса, оконный интерфейс (опции меню, окна ответов, значение нажатых клавиш).
Задача 8. Разработать программу исследования элементарных функций: sin x, cos x, tg x, ln x, eх, arcsin x, ctg x, задаваемых пользователем. Обеспечить для каждой функции вывод таблицы значений на заданном интервале [0..1] с заданным шагом, поиск корней и определение максимума и минимума. Взаимодействие пользователя и программы организуйте с использованием 2-хуровнего меню (исследование функций, список операций).
Задача 9. Создать базу данных об учениках старших классов школы. Записи должны содержать следующие поля: класс, фамилия, имя, отечество, 4 предмета обучения, средний балл, оценка за поведение. Создать меню со следующими пунктами: F1 – ввод данных, F2 - просмотр, F3 - поиск, F4 – выход. База данных позволяет вывод данных в табличной форме (оконной форме). Пункты меню расположены горизонтально, на одной линии в верхней части экрана. При выводе, вводе, поиске, меню присутствует.
Задача 10. Разработать программу проигрывания 3-х простейших мелодий с помощью управления встроенным динамиком, используя меню выбора мелодий и их прерывания клавишей «Esc ».
Лабораторная работа №4.
Двухуровневое меню
Цель работы – овладение практическими навыками программирования по созданию многоуровневых пользовательских меню, для решения собственных задач.
1. Практическая часть
Результаты выполнения данной лабораторной работы должны быть сведены в два модуля:
-
модуль численного интегрирования;
-
и модуль численного решения уравнений.
Написать программу двухуровневого меню, в которой меню 1-го уровня имеет вид (ориентировочно)
Unit1
Unit2
Exit
а меню 2-го уровня имеют вид (ориентировочно)
Метод 1
Метод 1
Метод 2
Метод 2
Метод3
Возврат
Возврат
Меню 2-го уровня должны частично перекрывать меню 1-го уровня, например, так
Unit2
Unit2
Метод 1
Метод 2
Выход
Для "анимации" меню использовать клавиши "Стрелка вверх", "Стрелка вниз", Home, End. Для выполнения пункта меню использовать клавишу Enter. Для возврата из меню 2-го уровня в меню 1-го уровня допустить использование клавиши Esc. Для завершения программы допустить использование комбинаций клавиш Alt-X или Ctrl-C. Нажатие всех прочих клавиш сопровождать звуковым сигналом. При работе с меню курсор временно выключать. Ввод данных и вывод результатов выполнять в диалоговых окнах. При возможности все процедуры и функции работы с окнами и меню собрать в отдельный модуль, с тем, чтобы главная программа была как можно меньшей.
В качестве ориентира предлагается текст главной программы, реализующей одноуровневое меню (файл MENEDEMO.PAS). Для зажигания/гашения курсора используется модуль Cursor (файл CURSOR.PAS).
2.Задачи, для самостоятельного решения:
Задача 1. Разработать двухмерное меню с выделением цветом нужного режима:
Для выбора режима используйте клавиши: , , , , Ввод. Методика выбора состоит в перемещении по меню, как по горизонтали, так и вертикали, с выделением цвета. Активизируется яркий режим нажатием клавиши «Ввод».