const
AppName = 'WinPaint';
id_Timer = 100; // идентификатор таймера
Идентифицировать таймер необходимо потому, что у приложения их может быть несколько. Для включения таймера (то, что в привычном антураже соответствует Timerl. Enabled: = True) вызывается функция API SetTimer, где задается требуемый интервал таймера:
SetTimer (Window, id_Timer, 200, nil); // установка таймера
Сделал я это перед входом в цикл обработки сообщений, но можно и при обработке сообщения WM_CREATE. Кстати, самое время сказать, что это сообщение обрабатывается в обход цикла обработки сообщений, поэтому таймер, включенный в обработчике WM_CREATE, начнет работать раньше. Оконная функция дополнилась обработкой сообщения, соответствующего такту таймера:
wm_Timer: InvalidateRect (Window, nil, False);
Если в приложении используется несколько таймеров, необходимо отделять их по значению идентификатора, передаваемому в wParam.
В моем примере каждые 200 миллисекунд окно перерисовывается вызовом функции API invalidateRect Запомните этот прием, потом мы не раз будем его использовать. Изменение цвета кружочка достигается тем, что при каждой перерисовке объект "кисть" принимает новое значение
Brush: = CreateSolidBrush (RGB(random (255), random (255), random(255)));
Как всегда в Windows, созданные объекты должны по окончании работы удаляться, дабы не поглощали ресурсы Для удаления таймера вызываем Функцию KillTimer в обработчике сообщения wm_Destroy:
KillTimer (Window, id_Timer);
Как видим, работать с таймером, используя только функции API, совсем не сложно. Компонент Delphi TTimer основывается на функциях и сообщениях, которые мы только что рассмотрели.