Программа не реагирует на Enter - Free Pascal
Формулировка задачи:
Листинг программы
- unit nice_menu;
- INTERFACE
- type
- TMenuItem = record
- name: string;
- submenu: array of string;
- end;
- TMenu = array of TMenuItem;
- procedure ShowMenu(var menu: TMenu; var item, subitem: integer);
- procedure ReadMenu(var menu: TMenu; var f: text);
- procedure AlignMenu(var menu: TMenu);
- IMPLEMENTATION
- uses crt;
- //----------------------------------------------------------------
- procedure ShowMenu(var menu: TMenu; var item, subitem: integer);
- var
- i, j, x: integer;
- ch: char;
- begin
- item := 0;
- subitem := -1;
- repeat
- textbackground(black);
- clrscr;
- textbackground(blue);
- textcolor(white);
- for i := 0 to high(menu) do
- if i = item then
- begin
- textbackground(white);
- textcolor(blue);
- x := whereX;
- write(menu[i].name, ' ');
- textbackground(blue);
- textcolor(white);
- if subitem >= 0 then
- for j := 0 to high(menu[i].submenu) do
- begin
- gotoxy(x, 2+j);
- if j = subitem then
- begin
- textbackground(white);
- textcolor(blue);
- write(menu[i].submenu[j]);
- textbackground(blue);
- textcolor(white);
- end
- else
- write(menu[i].submenu[j]);
- end;
- end
- else
- write(menu[i].name, ' ');
- ch := readkey;
- if ch <> #0 then
- continue;
- case readkey of
- #13:
- if subitem >= 0 then
- exit
- else
- subitem := 0;
- #77:
- begin
- item := (item + 1) mod length(menu);
- if subitem >= 0 then
- subitem := 0;
- end;
- #75:
- begin
- item := (length(menu) + item - 1) mod length(menu);
- if subitem >= 0 then
- subitem := 0;
- end;
- #80:
- if subitem >= 0 then
- subitem := (subitem + 1) mod length(menu[item].submenu);
- #72:
- if subitem >= 0 then
- subitem := (length(menu[item].submenu) + subitem - 1) mod length(menu[item].submenu);
- #27:
- subitem := -1;
- end;
- until false;
- end;
- //----------------------------------------------------------------
- procedure ReadMenu(var menu: TMenu; var f: text);
- var
- i, j, menulen, sublen: integer;
- begin
- readln(f, menulen);
- setlength(menu, menulen);
- for i := 0 to high(menu) do
- with menu[i] do
- begin
- readln(f, name);
- readln(f, sublen);
- setlength(submenu, sublen);
- for j := 0 to high(submenu) do
- readln(f, submenu[j]);
- end;
- end;
- //----------------------------------------------------------------
- procedure AlignMenu(var menu: TMenu);
- var
- i, j, maxlen: integer;
- begin
- for i := 0 to high(menu) do
- with menu[i] do
- begin
- maxlen := 0;
- for j := 0 to high(submenu) do
- if length(submenu[j]) > maxlen then
- maxlen := length(submenu[j]);
- for j := 0 to high(submenu) do
- begin
- while length(submenu[j]) < maxlen do
- submenu[j] := submenu[j] + ' ';
- submenu[j] := ' ' + submenu[j] + ' ';
- end;
- end;
- end;
- //----------------------------------------------------------------
- begin end.
Решение задачи: «Программа не реагирует на Enter»
textual
Листинг программы
- ch := readkey;
- if ch = #0 then ch := readkey;
- case readkey of
- #13:
Объяснение кода листинга программы
- Сначала программа ожидает нажатия клавиши.
- Если нажата клавиша Enter (которая имеет ASCII-код 13), то выполняется блок кода, который начинается с case 13.
- В этом блоке кода программа не делает ничего, так как его единственная цель - просто обработать нажатие клавиши Enter.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д