Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 00:04   #1
H4t
Пользователь
 
Регистрация: 14.11.2012
Сообщений: 31
По умолчанию Pascal ABC. Создание меню через crt.

Имеется код:
Код:
program menu2;
uses Crt;
const
     NORM=$17; 
     SEL=$70;  
     N=3;
var
     menu:array[1..N] of string[12];
     punkt:integer; 
     ch:char;        
     x,y:integer;    

Procedure punkt1;
begin
     ClrScr;
     writeln('Процедура 1. Нажмите <Enter> для продолжения.');
     readln;
end;

Procedure punkt2;
begin
     ClrScr;
     writeln('Процедура 1. Нажмите <Enter> для продолжения.');
     readln;
end;

Procedure MenuToScr;
var i:integer;
begin
     ClrScr;
     for i:=1 to N do begin
          GoToXY(x,y+i-1);
          write(menu[i]);
     end;
     TextAttr:=SEL;
     GoToXY(x,y+punkt-1);
     write(menu[punkt]);
     TextAttr:=NORM;
end;

begin
     menu[1]:=' Действие 1 ';
     menu[2]:=' Действие 2 ';
     menu[3]:=' Выход ';
     punkt:=1;
     x:=5;
     y:=5; TextAttr:=NORM;
     MenuToScr;
     repeat
          ch:=ReadKey;
          if ch=char(0) then begin
               ch:=ReadKey;
               case ch of
                    chr(80):
                         if punkt<N then begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt+1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                         end;
                    chr(72):
                         if punkt>1 then begin
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              punkt:=punkt-1;
                              TextAttr:=SEl;
                              GoToXY(x,y+punkt-1);
                              write(menu[punkt]);
                              TextAttr:=NORM;
                         end;
                 end;
              end
          else
               if ch=chr(13) then begin 
                    case punkt of
                         1:punkt1;
                         2:punkt2;
                         3:ch:=chr(27);
                    end;
                    MenuToScr;
               end;
     until ch=chr(27);
end.
При выполнении процедуры возврат в меню происходит, но не визуально, т.е. пользователь спокойно может переключиться на другую процедуру и выполнить её, но на экране с момента вызова 1 процедуры на экране ничего не меняется. Насколько я знаю в Турбо Паскале сия проблема отсутствует..
Буду благодарен за любую помощь.
H4t вне форума Ответить с цитированием
Старый 13.05.2013, 13:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это связано с особенностью реализации Readln в Pascal ABC

замените процедуры обработки пунктов на такие:
Код:
Procedure punkt1;
begin
     ClrScr;
     writeln('Процедура 1. Нажмите <Enter> для продолжения.');
     repeat
       ch := readkey;
     until ch=#13;
end;

Procedure punkt2;
begin
     ClrScr;
     writeln('Процедура 2. Нажмите <Enter> для продолжения.');
     repeat
       ch := readkey;
     until ch=#13;
end;
....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание и удаление дочернего окна через меню graveman Win Api 1 16.10.2012 12:45
Работа:модуль CRT (Pascal) Sikey Помощь студентам 1 26.01.2010 16:48
Создание меню в Pascal Real7 Помощь студентам 3 20.12.2009 16:28
Меню в ABC Pascal Desha Паскаль, Turbo Pascal, PascalABC.NET 0 23.11.2009 21:24
Создание модулей в Pascal ABC Desha Паскаль, Turbo Pascal, PascalABC.NET 5 25.10.2009 17:01