Сделать рамку слева от меню - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Хотел бы сделать рамку с 4 строками, идущими вертикально, правее менюшки. Рамка такая: [tab - влево backspace - вправо escape - отмена / сброс enter - выбор] Через какие методы это можно сделать? код:
Листинг программы
  1. uses crt;
  2. const kol=8;{количество пунктов меню}
  3. {массив названий пунктов меню}
  4. vibor:array[1..kol] of string=(
  5. 'создать класс',
  6. 'редактировать название авто',
  7. 'редактировать цвет авто',
  8. 'редактировать скорость авто',
  9. 'редактировать массу авто',
  10. 'удалить класс',
  11. 'редактировать тип авто',
  12. 'посмотреть класс');
  13. v='Выбран вариант: ';
  14. type
  15. Vehicle = class
  16. private
  17. color:string;
  18. name:string;
  19. speed:integer;
  20. weight:real;
  21. public
  22. constructor Create;
  23. destructor Destroy;
  24. function getName:string;
  25. function getColor:string;
  26. function getSpeed:integer;
  27. function getWeight:real;
  28. procedure setName(_name:string);
  29. procedure setColor(_color:string);
  30. procedure setSpeed(_speed:integer);
  31. procedure setWeight(_weight:real);
  32. function ToString:string;virtual;
  33. end;
  34. Car = class(Vehicle)
  35. private
  36. car_type: string;
  37. public
  38. constructor Create;
  39. destructor Destroy;
  40. function getType: string;
  41. procedure setType(_car_type: string);
  42. function ToString: string; override;
  43. end;
  44. {##################-----Vehicle-----##########################}
  45. constructor Vehicle.Create;
  46. begin
  47. writeln('Vehicle.Create');
  48. writeln('Enter name');readln(name);
  49. writeln('Enter color');readln(color);
  50. writeln('Enter speed');readln(speed);
  51. writeln('Enter weight');readln(weight);
  52. writeln('Enter type');readln(car_type);
  53. end;
  54.  
  55. destructor Vehicle.Destroy;
  56. begin
  57. writeln('Vehicle.Destroy');
  58. end;
  59.  
  60. function Vehicle.getName: string;
  61. begin
  62. writeln('Vehicle.getName: ', self.name);
  63. result := self.name;
  64. end;
  65. function Vehicle.getColor: string;
  66. begin
  67. writeln('Vehicle.getColor: ', self.color);
  68. result := self.color;
  69. end;
  70.  
  71. function Vehicle.getSpeed: integer;
  72. begin
  73. writeln('Vehicle.getSpeed: ', self.speed);
  74. result := self.speed;
  75. end;
  76.  
  77. function Vehicle.getWeight: real;
  78. begin
  79. writeln('Vehicle.getWeight: ', self.weight);
  80. result := self.weight;
  81. end;
  82.  
  83. procedure Vehicle.setName(_name: string);
  84. begin
  85. writeln('Vehicle.setName: ', _name);
  86. self.name := _name;
  87. end;
  88. procedure Vehicle.setColor(_color: string);
  89. begin
  90. writeln('Vehicle.setColor: ', _color);
  91. self.color := _color;
  92. end;
  93.  
  94. procedure Vehicle.setSpeed(_speed: integer);
  95. begin
  96. writeln('Vehicle.setSpeed: ', _speed);
  97. self.speed := _speed;
  98. end;
  99.  
  100. procedure Vehicle.setWeight(_weight: real);
  101. begin
  102. writeln('Vehicle.setWeight: ', _weight);
  103. self.weight := _weight;
  104. end;
  105.  
  106. function Vehicle.ToString: string;
  107. begin
  108. result := 'Name - ' + self.name
  109. + ' Color - ' + self.color
  110. + ' Speed - ' + IntToStr(self.speed)
  111. + ' Weight - ' + FloatToStr(self.weight);
  112. end;
  113. {##################-----Vehicle-----##########################}
  114. {##################-----CAR-----##########################}
  115. constructor Car.Create;
  116. begin
  117. inherited;
  118. writeln('Car.Created');
  119. end;
  120. destructor Car.Destroy;
  121. begin
  122. writeln('Car.Destroy');
  123. end;
  124.  
  125. function Car.getType: string;
  126. begin
  127. writeln('Car.getType: ', self.car_type);
  128. result := self.car_type;
  129. end;
  130.  
  131. procedure Car.setType(_car_type: string);
  132. begin
  133. writeln('Car.setType: ', _car_type);
  134. self.car_type := _car_type;
  135. end;
  136. function Car.ToString: string;
  137. begin
  138. result := 'Name - ' + self.name
  139. + ' Color - ' + self.color
  140. + ' Speed - ' + IntToStr(self.speed)
  141. + ' Weight - ' + FloatToStr(self.weight)
  142. + ' Type - ' + self.car_type;
  143. end;
  144.  
  145. procedure Menu(var k:byte);{создание и вывод на экран меню}
  146. var kod: char;
  147. i:byte;
  148. begin
  149. window(1,1,80,25);
  150. textbackground(0);
  151. clrscr;
  152. k:=1;
  153. gotoxy(4,1);
  154. writeln('Демонстрационная программа по теме "Классы и подклассы"');
  155. k:=1; {выведен первый пункт меню}
  156. repeat
  157. for i:=1 to kol do
  158. begin
  159. if i=k then {выделенный пункт}
  160. begin
  161. textbackground(3);
  162. textcolor(9);
  163. end
  164. else {остальные}
  165. begin
  166. textbackground(0);
  167. textcolor(15)
  168. end;
  169. gotoxy(1,i+1);{ставим курсор}
  170. write(vibor[i]);{выводим пункты}
  171. end;
  172. repeat
  173. kod:=readkey;
  174. until Kod in [#8, #9, #13,#27];
  175. case Kod of
  176. #8: begin{стрелка вверх}
  177. k:=k-1;
  178. if k=0 then k:=8;{если выше верха, вниз}
  179. end;
  180. #9: begin {стрелка вниз}
  181. k:=k+1;
  182. if k=9 then k:=1;{если ниже низа, вверх}
  183. end;
  184. #27: begin
  185. writeln;
  186. writeln('Вы экстренно завершили выполнение программы');
  187. halt;
  188. end;
  189. end;
  190. until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
  191. end;
  192. {основная программа}
  193. var k:byte;
  194. mcar: Car;
  195. begin
  196. repeat
  197. textbackground(0);
  198. textcolor(15);
  199. Menu(k);{выводим меню}
  200. clrscr;
  201. writeln(v,vibor[k]);
  202. case k of{выбираем стрелками действие}
  203. 1: begin
  204. //writeln(v,vibor[1]);
  205. mcar := new Car;
  206. readln
  207. end;
  208. 2: begin
  209. //writeln(v,vibor[2]);
  210. write('Enter new name: ');
  211. mcar.setName(ReadString());
  212. readln
  213. end;
  214. 3: begin
  215. //writeln(v,vibor[3]);
  216. write('Enter new color: ');
  217. mcar.setColor(ReadString());
  218. readln
  219. end;
  220. 4: begin
  221. //writeln(v,vibor[4]);
  222. write('Enter speed: ');
  223. mcar.setSpeed(ReadInteger());
  224. readln
  225. end;
  226. 5: begin
  227. //writeln(v,vibor[5]);
  228. write('Enter weight: ');
  229. mcar.setWeight(ReadInteger());
  230. readln
  231. end;
  232. 6: begin
  233. //write(v,vibor[6]);
  234. mcar.Destroy;
  235. readln
  236. end;
  237. 7: begin
  238. //writeln(v,vibor[7]);
  239. write('Enter type: ');
  240. Car(mcar).setType(ReadString());
  241. readln
  242. end;
  243. 8: begin
  244. //writeln(v,vibor[8]);
  245. writeln(mcar.ToString);
  246. readln
  247. end;
  248. 9: begin
  249. window(1,1,80,25);
  250. textbackground(0);
  251. clrscr;
  252. textcolor(15);
  253. end;
  254. end;
  255. until k=9;
  256. end.

Решение задачи: «Сделать рамку слева от меню»

textual
Листинг программы
  1. vibor:array[1..kol] of string=(
  2.   'создать класс',
  3.   'редактировать название авто --------------------------',
  4.   'редактировать цвет авто     | tab - влево            | ',
  5.   'редактировать скорость авто | backspace - вправо     |',
  6.   'редактировать массу авто    | escape - отмена / сброс|',
  7.   'удалить класс               | enter - выбор          |',
  8.   'редактировать тип авто      --------------------------',
  9.   'посмотреть класс');

Объяснение кода листинга программы

  1. Создается массив строк с названием vibor и размером от 1 до kol.
  2. В массиве vibor содержатся строки, которые представляют собой пункты меню.
  3. Каждая строка начинается с названия пункта меню, после которого идет разделительная строка.
  4. После разделительной строки идут два столбца, разделенные вертикальными линиями, которые представляют собой выпадающее меню.
  5. В первом столбце находятся названия пунктов подменю, а во втором столбце - их значения.
  6. Последний пункт меню содержит название посмотреть класс, которое выделяется отдельно.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

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