Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Обработка событий при непрерывном цикле


Автор: DelphianOracle 4.10.2007, 18:37
Доброго всем времени суток!
Есть вопрос.
Я использую для движения спрайта следуйщий код:
Код

   while true do
   begin
      dx:=round(Speed*(now-oldTm)*secsperday);
      dx:=round(Speed*(now-oldTm)*secsperday);
      oldTm:=now;
      X:=X+dx;
      Y:=Y+dy;
      with form1 do
      begin
         Buffer.Canvas.CopyRect(rect(0,0,screen.Width,screen.Height),
                        fon.Canvas,rect(0,0,screen.Width,screen.Height));
         Buffer.Canvas.Draw(x,10,leftDuck.Picture.Graphic);
         FScreen.Canvas.CopyRect(rect(0,0,screen.Width,screen.Height),
                        Buffer.Canvas,rect(0,0,screen.Width,screen.Height));
      end;
      application.ProcessMessages;
      sleep(1);
   end;

но, к величайшему моему сожалению, при этом никакие события не проходят. Приходится делать Program reset. Что делать?

Автор: Alexeis 4.10.2007, 19:09
DelphianOracle, рисовать следует в OnPaint.

Автор: DelphianOracle 4.10.2007, 20:21
>DelphianOracle, рисовать следует в OnPaint.
FScreen - и есть OnPaint

Автор: Alexeis 4.10.2007, 21:07
FScreen - это объект, а OnPaint это обработчик предназначенный для отрисовки.

Автор: DelphianOracle 5.10.2007, 19:11
Пробовал, не помогает.
Поставил вместо цикла таймер с минимальным интервалом, заработало.

Автор: Alexeis 5.10.2007, 19:47
DelphianOracle, так в таймере нужно было вызывать Invalidate, а рисовать в OnPaint.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)