Сделать рамку слева от меню - PascalABC.NET
Формулировка задачи:
Хотел бы сделать рамку с 4 строками, идущими вертикально, правее менюшки.
Рамка такая:
[tab - влево
backspace - вправо
escape - отмена / сброс
enter - выбор]
Через какие методы это можно сделать?
код:
Листинг программы
- uses crt;
- const kol=8;{количество пунктов меню}
- {массив названий пунктов меню}
- vibor:array[1..kol] of string=(
- 'создать класс',
- 'редактировать название авто',
- 'редактировать цвет авто',
- 'редактировать скорость авто',
- 'редактировать массу авто',
- 'удалить класс',
- 'редактировать тип авто',
- 'посмотреть класс');
- v='Выбран вариант: ';
- type
- Vehicle = class
- private
- color:string;
- name:string;
- speed:integer;
- weight:real;
- public
- constructor Create;
- destructor Destroy;
- function getName:string;
- function getColor:string;
- function getSpeed:integer;
- function getWeight:real;
- procedure setName(_name:string);
- procedure setColor(_color:string);
- procedure setSpeed(_speed:integer);
- procedure setWeight(_weight:real);
- function ToString:string;virtual;
- end;
- Car = class(Vehicle)
- private
- car_type: string;
- public
- constructor Create;
- destructor Destroy;
- function getType: string;
- procedure setType(_car_type: string);
- function ToString: string; override;
- end;
- {##################-----Vehicle-----##########################}
- constructor Vehicle.Create;
- begin
- writeln('Vehicle.Create');
- writeln('Enter name');readln(name);
- writeln('Enter color');readln(color);
- writeln('Enter speed');readln(speed);
- writeln('Enter weight');readln(weight);
- writeln('Enter type');readln(car_type);
- end;
- destructor Vehicle.Destroy;
- begin
- writeln('Vehicle.Destroy');
- end;
- function Vehicle.getName: string;
- begin
- writeln('Vehicle.getName: ', self.name);
- result := self.name;
- end;
- function Vehicle.getColor: string;
- begin
- writeln('Vehicle.getColor: ', self.color);
- result := self.color;
- end;
- function Vehicle.getSpeed: integer;
- begin
- writeln('Vehicle.getSpeed: ', self.speed);
- result := self.speed;
- end;
- function Vehicle.getWeight: real;
- begin
- writeln('Vehicle.getWeight: ', self.weight);
- result := self.weight;
- end;
- procedure Vehicle.setName(_name: string);
- begin
- writeln('Vehicle.setName: ', _name);
- self.name := _name;
- end;
- procedure Vehicle.setColor(_color: string);
- begin
- writeln('Vehicle.setColor: ', _color);
- self.color := _color;
- end;
- procedure Vehicle.setSpeed(_speed: integer);
- begin
- writeln('Vehicle.setSpeed: ', _speed);
- self.speed := _speed;
- end;
- procedure Vehicle.setWeight(_weight: real);
- begin
- writeln('Vehicle.setWeight: ', _weight);
- self.weight := _weight;
- end;
- function Vehicle.ToString: string;
- begin
- result := 'Name - ' + self.name
- + ' Color - ' + self.color
- + ' Speed - ' + IntToStr(self.speed)
- + ' Weight - ' + FloatToStr(self.weight);
- end;
- {##################-----Vehicle-----##########################}
- {##################-----CAR-----##########################}
- constructor Car.Create;
- begin
- inherited;
- writeln('Car.Created');
- end;
- destructor Car.Destroy;
- begin
- writeln('Car.Destroy');
- end;
- function Car.getType: string;
- begin
- writeln('Car.getType: ', self.car_type);
- result := self.car_type;
- end;
- procedure Car.setType(_car_type: string);
- begin
- writeln('Car.setType: ', _car_type);
- self.car_type := _car_type;
- end;
- function Car.ToString: string;
- begin
- result := 'Name - ' + self.name
- + ' Color - ' + self.color
- + ' Speed - ' + IntToStr(self.speed)
- + ' Weight - ' + FloatToStr(self.weight)
- + ' Type - ' + self.car_type;
- end;
- procedure Menu(var k:byte);{создание и вывод на экран меню}
- var kod: char;
- i:byte;
- begin
- window(1,1,80,25);
- textbackground(0);
- clrscr;
- k:=1;
- gotoxy(4,1);
- writeln('Демонстрационная программа по теме "Классы и подклассы"');
- k:=1; {выведен первый пункт меню}
- repeat
- for i:=1 to kol do
- begin
- if i=k then {выделенный пункт}
- begin
- textbackground(3);
- textcolor(9);
- end
- else {остальные}
- begin
- textbackground(0);
- textcolor(15)
- end;
- gotoxy(1,i+1);{ставим курсор}
- write(vibor[i]);{выводим пункты}
- end;
- repeat
- kod:=readkey;
- until Kod in [#8, #9, #13,#27];
- case Kod of
- #8: begin{стрелка вверх}
- k:=k-1;
- if k=0 then k:=8;{если выше верха, вниз}
- end;
- #9: begin {стрелка вниз}
- k:=k+1;
- if k=9 then k:=1;{если ниже низа, вверх}
- end;
- #27: begin
- writeln;
- writeln('Вы экстренно завершили выполнение программы');
- halt;
- end;
- end;
- until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
- end;
- {основная программа}
- var k:byte;
- mcar: Car;
- begin
- repeat
- textbackground(0);
- textcolor(15);
- Menu(k);{выводим меню}
- clrscr;
- writeln(v,vibor[k]);
- case k of{выбираем стрелками действие}
- 1: begin
- //writeln(v,vibor[1]);
- mcar := new Car;
- readln
- end;
- 2: begin
- //writeln(v,vibor[2]);
- write('Enter new name: ');
- mcar.setName(ReadString());
- readln
- end;
- 3: begin
- //writeln(v,vibor[3]);
- write('Enter new color: ');
- mcar.setColor(ReadString());
- readln
- end;
- 4: begin
- //writeln(v,vibor[4]);
- write('Enter speed: ');
- mcar.setSpeed(ReadInteger());
- readln
- end;
- 5: begin
- //writeln(v,vibor[5]);
- write('Enter weight: ');
- mcar.setWeight(ReadInteger());
- readln
- end;
- 6: begin
- //write(v,vibor[6]);
- mcar.Destroy;
- readln
- end;
- 7: begin
- //writeln(v,vibor[7]);
- write('Enter type: ');
- Car(mcar).setType(ReadString());
- readln
- end;
- 8: begin
- //writeln(v,vibor[8]);
- writeln(mcar.ToString);
- readln
- end;
- 9: begin
- window(1,1,80,25);
- textbackground(0);
- clrscr;
- textcolor(15);
- end;
- end;
- until k=9;
- end.
Решение задачи: «Сделать рамку слева от меню»
textual
Листинг программы
- vibor:array[1..kol] of string=(
- 'создать класс',
- 'редактировать название авто --------------------------',
- 'редактировать цвет авто | tab - влево | ',
- 'редактировать скорость авто | backspace - вправо |',
- 'редактировать массу авто | escape - отмена / сброс|',
- 'удалить класс | enter - выбор |',
- 'редактировать тип авто --------------------------',
- 'посмотреть класс');
Объяснение кода листинга программы
- Создается массив строк с названием
vibor
и размером от 1 доkol
. - В массиве
vibor
содержатся строки, которые представляют собой пункты меню. - Каждая строка начинается с названия пункта меню, после которого идет разделительная строка.
- После разделительной строки идут два столбца, разделенные вертикальными линиями, которые представляют собой выпадающее меню.
- В первом столбце находятся названия пунктов подменю, а во втором столбце - их значения.
- Последний пункт меню содержит название
посмотреть класс
, которое выделяется отдельно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д