не учёл static...
смотри Multimedia Timer на MSDN. или вот:
uses MMSystem; // подключаем Win32 multimedia API (Winapi.MMSystem)
mmResult: Integer; // ID таймера
procedure TimeCallBack(TimerID, Msg: word; dwUser, dw1, dw2: DWORD); stdcall; // callback функция
begin
form1.Timer1Timer(nil); // рисуем
end;
mmResult:=TimeSetEvent(20, 0, @TimeCallBack, 0, TIME_PERIODIC); // создаём таймер
TimeKillEvent(mmResult); // удаляем таймер
и идеально, если step не вычислять ( step:=0.02; )