русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ф О Р М И Р О В А Н И Е М Е Н Ю


Дата добавления: 2014-11-27; просмотров: 496; Нарушение авторских прав


 

Наиболее примитивным способом организации меню является выбор позиции меню по ее порядковому номеру с помощью оператора Case.

Const St : array[1..4] of string[32]=

('П о з и ц и я 1','П о з и ц и я 2',

'П о з и ц и я 3','В ы х о д');

Var i,Switch : byte;

Cond : boolean;

Begin

Fori:=1 to 4 do

Writeln(i:2,' ',St[i]);

Writeln('Укажите позицию меню');

Cond:=false;

Repeat

Readln(Switch);

Case Switch of

1 : Proc1;

2 : Proc2;

3 : Proc3;

4 : Cond:=true;

end;

Until Cond;

 

Оператор Case формирует обращение к одной из процедур Proc1 .. Proc3 в зависимости от введенного значения переменной Switch.

Более совершенным является формирование такого меню, в котором строка-курсор указывает на выбираемую позицию путем ее цветового выделения. При этом клавиши перемещения курсора обеспечивают видимое передвижение по позициям меню, а активизация выбранной позиции производится нажатием заранее определенной управляющей клавиши (например, Enter или Tab).

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

 

UsesCrt,Dos;

Const St : array[1..5] of string[32]=('П о з и ц и я 1',

'П о з и ц и я 2','П о з и ц и я 3',

'П о з и ц и я 4','В ы х о д');

BlueYellow=16*Blue+Yellow; { атрибут выделенной позиции }

LightGrayBlack = 16*LightGray+Black; { атрибут остальных }

{ позиций меню }

UpBorder=10; { верхняя граница рамки }

LeftBorder=18; { левая граница рамки }

LengthString=34; { длина строки-подсветки меню }

MenuCount=5; { кол-во позиций меню }

TypeScreenChar = record{ тип элемента видеопамяти }

Symbol : char; { символ }

Attrib : byte; { атрибут }

end;

ScreenArray = array[1..25,1..80] of ScreenChar;



{ тип видеопамяти }

Var i,

CurrRow,CurrCol, { текущие строка и столбец экрана}

Key, { ординальный номер символа }

Switch : byte; { номер позиции меню }

CondExit : boolean; { признак выхода из меню }

Screen : ScreenArray absolute $B800:$0000;{ видеопамять }

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

ProcedureInsertColorString(Row,Col,Len,Color : byte);

{ Выделение строки Row цветом Color (изображение и фон) }

Varj : byte;

Begin

Forj:=Col to Col+Len do

Screen[Row,j].Attrib:=Color;

End { InsertColorString };

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

Procedure MoveCursor(UpRow,DnRow,StepRow,Len,NewColor,

OldColor:byte);

{ Перемещение курсора-строки длиной Len по экрану: UpRow, }

{ DnRow,StepRow - верхняя,нижняя границы и шаг перемещения;}

{ NewColor,OldColor - цветовые атрибуты строки-курсора и }

{ остального поля }

Var Cond : boolean;

Begin

Repeat

Key:=GetKey; Cond:=false;

Case Key of { верт.перемещение цветового выделения }

9,13 : Cond:=true; { Tab, Enter }

72 : Begin{ Up }

InsertColorString(CurrRow,CurrCol,Len,OldColor);

IfCurrRow>=UpRow+StepRow then

CurrRow:=CurrRow-StepRow

Else

CurrRow:=DnRow;

End;

80 : Begin{ Down }

InsertColorString(CurrRow,CurrCol,Len,OldColor);

IfCurrRow<=DnRow-StepRow then

CurrRow:=CurrRow+StepRow

Else

CurrRow:=UpRow;

End;

end;

InsertColorString(CurrRow,CurrCol,Len,NewColor);

Until Cond;

End { MoveCursor };

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

Procedure Frame(x1,y1,x2,y2,Color : byte);

{ Вычерчивание прямоугольной рамки с заданными координатами }

{ одинарной линией; цвет и фон - Color }

VarChGr,ChVr, { символы для гор. и верт.линий }

LfUp,LfDn, { рамки, для левого верхнего, }

RtUp,RtDn : char; { левого нижнего, правого верхнего }

i,j : byte; { и правого нижнего углов рамки }

Begin

TextAttr:=Color;

ChGr:=#196; ChVr:=#179; LfUp:=#218;

LfDn:=#192; RtUp:=#191; RtDn:=#217;

GotoXY(x1,y1); Write(LfUp);

Fori:=x1+1 to x2-1 do

Write(ChGr);

Write(RtUp);

Fori:=y1+1 to y2-1 do

Begin

GotoXY(x1,i); Write(ChVr);

GotoXY(x2,i); Write(ChVr)

End;

GotoXY(x1,y2); Write(LfDn);

For i:=x1+1 to x2-1 do

Write(ChGr);

Write(RtDn);

For i:=y1+1 toy2-1 do{ Очистка области экрана,}

For j:=x1+1 to x2-1 do { ограниченного рамкой }

Begin

Screen[i,j].Symbol:=' ';

Screen[i,j].Attrib:=Color;

End;

End { Frame };

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

Begin

SetCursor($2000); { отключение курсора }

TextBackGround(Magenta); ClrScr; { очистка экрана }

Frame(LeftBorder,UpBorder,LeftBorder+LengthString+6,

UpBorder+2*MenuCount+2,LightGrayBlack); { рамка }

For i:=1 toMenuCount do{ печать в рамке позиций меню }

Begin

GotoXY(LeftBorder+4,UpBorder+2*i); Write(St[i]);

End;

CurrRow:=UpBorder+2; { начальное значение }

CurrCol:=LeftBorder+3; { позиции экрана }

InsertColorString(CurrRow,CurrCol,LengthString,BlueYellow);

{ выделение начальной позиции экрана }

CondExit:=false;

Repeat

MoveCursor(UpBorder+2,UpBorder+2*MenuCount,2,LengthString,

BlueYellow,LightGrayBlack); { управление пере-}

Switch:=(CurrRow-UpBorder) div 2; { движением строки-}

Case Switch of{ курсора }

1 : Proc1;

2 : Proc2;

3 : Proc3;

4 : Proc4;

5 : CondExit:=true;

end;

Until CondExit;

SetCursor($0607); { включение курсора }

End.

 

В основной программе вначале формируется на экране рамка путем обращения к процедуре Frame. Цвет рамки и фоновый цвет ее внутренней области определяются значением формального параметра Color, которому при обращении присваивается значение константы LightGrayBlack.

После отработки процедуры Frame на экране печатаются строки массива St, определяющие содержание позиций меню. Начальная активизация одной из позиций обеспечивается заданием значений переменным CurrRow (номер текущей строки экрана) и CurrCol (номер текущего столбца экрана), после чего процедура InsertColorString подсвечивает выделенную позицию цветом BlueYellow.

Передвижение строки-курсора по позициям меню осуществляется процедурой MoveCursor, выход из которой производится при нажатии клавишей Enter или Tab. При этом текущее значение переменной CurrRow указывает положение активизированной позиции меню, после чего с помощью оператора Caseосуществляется обращение к процедуре, соответствующей этой позиции.

Аналогичным образом можно организовать формирование горизонтального меню.

 

 



<== предыдущая лекция | следующая лекция ==>
У П Р А В Л Е Н И Е К Л А В И А Т У Р О Й | О П Р О С И Н А З Н А Ч Е Н И Е Д А Т Ы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.007 сек.