Пытаюсь написать процедурку, которая напротив элемента меню (всего 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;
volvo
8.04.2007 22:50
Во-первых, у клавиш "стрелка вверх/стрелка вниз" расширенные коды (сначала символ #0, а потом - собственно код), а ты обрабатываешь, как обычные...
А во-вторых, вот этот кусочек можно сократить как минимум на 7 строк
Tan
8.04.2007 23:03
Вы не могли бы это продемонстрировать ? и ord(ch) = #072 не компилится, как правильно задать нажатие этих клавишь ?
Tan
8.04.2007 23:32
Со своим кодом разобрался, но с удовольствием бы посмотрел на сокращённую версию!
volvo
8.04.2007 23:40
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;