IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Эмитация меню, Прошу помоч найти ошибку
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Пытаюсь написать процедурку, которая напротив элемента меню (всего 6 элементов) рисует стрелку и при нажатии клавишь вверх и вниз перемещается соотвественно, впритык не вижу, где ошибка. Процедура clean очищает все стрелки которые только возможны. В результате стрелка рисуется 1 раз а потом не двигается. Программа уж очень громоздкая, но если по данному кусочку не сможете помочь, сделаю поменьше и выложу:

begin
command:=1;
y:=14;
x:=25;
While True do
begin
ch:=readkey;
If ord(readkey) = 27 then Exit;
if ord(ch) = 72 then
begin
if (command <> 1) then dec (command)
else command:= 6;
end
else if ord(ch) = 80 then
begin
if command <> 6 then inc(command)
else command:=1;
end;
case command of
1: begin clean; gotoXY(X-5,Y); textcolor(black); write ('---->'); end;
2: begin clean; gotoXY(X-5,Y + 2); textcolor(black); write ('---->'); end;
3: begin clean; gotoXY(X-5,Y + 4); textcolor(black); write ('---->'); end;
4: begin clean; gotoXY(X-5,Y + 6); textcolor(black); write ('---->'); end;
5: begin clean; gotoXY(X-5,Y + 8); textcolor(black); write ('---->'); end;
6: begin clean; gotoXY(X-5,Y + 10); textcolor(black); write ('---->'); end;
end;
end;



--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Во-первых, у клавиш "стрелка вверх/стрелка вниз" расширенные коды (сначала символ #0, а потом - собственно код), а ты обрабатываешь, как обычные...

А во-вторых, вот этот кусочек можно сократить как минимум на 7 строк smile.gif

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Вы не могли бы это продемонстрировать ? и ord(ch) = #072 не компилится, как правильно задать нажатие этих клавишь ?

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Со своим кодом разобрался, но с удовольствием бы посмотрел на сокращённую версию!


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






         case command of
1: begin clean; gotoXY(X-5,Y); textcolor(black); write ('---->'); end;
2: begin clean; gotoXY(X-5,Y + 2); textcolor(black); write ('---->'); end;
3: begin clean; gotoXY(X-5,Y + 4); textcolor(black); write ('---->'); end;
4: begin clean; gotoXY(X-5,Y + 6); textcolor(black); write ('---->'); end;
5: begin clean; gotoXY(X-5,Y + 8); textcolor(black); write ('---->'); end;
6: begin clean; gotoXY(X-5,Y + 10); textcolor(black); write ('---->'); end;
end;

очень просто меняется на:
Clean; GotoXY(X - 5, Y + Pred(command) * 2); Textcolor(black); write('---->');
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 18.04.2021 16:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name