Конференция "FreePascal" » Проблема с процедурой Delay
 
  • Dark Lord © (16.10.07 13:35) [0]
    Здравствуйте!
    Делаю курсовой по Pascal - ханойскую башню.
    Все уже почти написал, осталась по сути только процедура таймера, котрая будет перерисовывать окошки. Думал использовать процедуру Delay. Как написано в справке - она приостанавливает выполнение кода программы на заданное количество миллисекунд. На практике она вообще не пытается даже приостановить этот самый код, в итоге процедура таймера отказывается нормально работать.
    Как можно еще реализовать задержку?
  • Dark Lord © (16.10.07 21:54) [1]
    По ходу дела возник еще один вопрос: а как на Паскале избавиться от мерцания экрана при перерисовке?
  • Dark Lord (28.10.07 14:44) [2]
    C процедурой задержки справился - сделал ее через функции времени. А вот проблема с мерцанием экрана так и осталась. Рылся в хелпе - нашел процедуры SetVisualPage SetActivePage - но они не захотели нормально работать. То есть мерцание исчезло, но почему-то эти процедуры выводят изображение хаотично - то есть каждый раз картинка показывается в новой части экрана... Почему так - не пойму. Больше процедур для немерцающей перерисовки не нашел. Что делать?
  • atruhin © (06.11.07 14:03) [3]
    По поводу Delay - известная ошибка в паскале, была масса патчей, и альтернативная процедура,
    и патч tp.exe. Ищи в сети.
    По поводу мерцания, SetVisualPage когда то нормально работала, использовал,
    но лучше поискать альтернативные библиотеки вывода графики, хотя для курсовой наверное не нужно,
    т.к. родные которые vga/svga очень медленные. Они не используют сопроцессор, и ориентируются на
    набор комманд 8086.
  • 123 (20.01.12 00:19) [4]
    Да во всей паутине одни критины предлогают слиип и цыклы, не вижу принципиальной разницы, что-то, что другое обрубит возможность общения пользователя с программой...

    а нужно совсем другой вариант.... что то типо таймера

    procedure TMIR.DPTTimer(Sender: TObject); //у таймера задаете нужный интервал
    begin                                                   //и получаете счетчик времени
    DPT.tag:=DPT.tag+1
    end;

    if DPT.tag=13 then ...... else
    if DPT.tag=27 then ...... else
    if DPT.tag=64 then ...... else ....

    но один большущий минус, что в большой программе длиннющий код выйдет и сам запутаешься с бегин-ендом, но этот вариант оставляет все возможности коммуникации программы с человеком
 
Конференция "FreePascal" » Проблема с процедурой Delay
Есть новые Нет новых   [119361   +17][b:0.001][p:0]