Помощь - Поиск - Пользователи - Календарь
Полная версия: Эмитация меню
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Tan
Пытаюсь написать процедурку, которая напротив элемента меню (всего 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
Во-первых, у клавиш "стрелка вверх/стрелка вниз" расширенные коды (сначала символ #0, а потом - собственно код), а ты обрабатываешь, как обычные...

А во-вторых, вот этот кусочек можно сократить как минимум на 7 строк smile.gif
Tan
Вы не могли бы это продемонстрировать ? и ord(ch) = #072 не компилится, как правильно задать нажатие этих клавишь ?
Tan
Со своим кодом разобрался, но с удовольствием бы посмотрел на сокращённую версию!
volvo
         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('---->');
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.