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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2012, 22:22   #1
kostghost
Пользователь
 
Аватар для kostghost
 
Регистрация: 28.08.2009
Сообщений: 18
По умолчанию Мерцание при выводе текста

Вывожу процесс выполнения процедуры примерно так:
Код:
For j:=1 to n do
  Begin
     ***
     clrscr;
     Writeln('Выполнено: ', j);
  End;
при этом заметно колоссальное мерцание, текст прочитать почти невозможно.
Чем можно заменить процедуру clrscr в этом случае для более
быстрого стирания/вывода?
Помню с модулем graph можно было пользоваться чем-то вроде двойной буферизации.
kostghost вне форума Ответить с цитированием
Старый 02.02.2012, 00:50   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Код:
ClrScr;
GotoXY(1,13);
write('Выполнено: 0');
for j:=1 to n do 
  begin
   ...
   GotoXY(13,13);
   write(j)
  end;
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 02.02.2012, 10:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

только, если длина выводимого текста может (вдруг) оказаться меньше, чем выведенный ранее текст, то он не будет затёрт (ну, например, вывод чисел от 1000 до 1 в обратном порядке..).

в таких случаях я бы стирал текст, забивая предыдущий вывод пустой строкой.
примерно так:
Код:
for j:=1000 downto 1 do 
  begin
   ...
   GotoXY(13,13);
   write('     ');
   GotoXY(13,13);
   write(j);
   Delay(30); {а это я добавил, чтобы числа не менялись как "чумачедчие" :)}
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.02.2012, 17:08   #4
kostghost
Пользователь
 
Аватар для kostghost
 
Регистрация: 28.08.2009
Сообщений: 18
По умолчанию

Step_UA, спасибо за совет.
Serge_Bliznykov, дополнение очень дельное, у меня как раз 2 цикла, так что считается выполнение текущей процедуры и общий процент выполнения так, что кол-во символов в первой постоянно меняются с двухзначного (0%) до четырехзначного (100%) и обратно. Поставлю стирание во внешний цикл.
Так сделал
Код:
uses crt;
var i,j:integer;
Begin
GotoXY(1,1);
write('Выполнено: 0');
GotoXY(1,2);
write('Общее выполнение: 0');
 For i:=1 to 80 do
  begin

   For j:=1 to 30 do
    begin
       GotoXY(12,1);
       write(j);
    end;

    GotoXY(19,2);
    write(i,'  ');
  end;
  Readln;
End.

Последний раз редактировалось kostghost; 02.02.2012 в 17:27.
kostghost вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе xml DKENT Работа с сетью в Delphi 0 08.02.2011 21:49
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
Мерцание при перерисовке!!!! Heming Помощь студентам 6 09.01.2011 13:15
Кракозябры при выводе Syltan HTML и CSS 4 11.12.2010 19:59