OpenGL в Delphi

       

Работа с таймером


В этом разделе мы разберем, как использовать таймер, основываясь только на функциях API Поскольку вы наверняка умеете работать с компонентом класса TTimer, вам легко будет уяснить, как это делается на уровне функций API.
Посмотрите простой пример, располагающийся в подкаталоге Exl7, где с течением времени меняется цвет нарисованного кружочка. Первым делом замечаем, что блок описания констант дополнился описанием идентификатора таймера, в качестве которого можно взять любое целое число.

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 основывается на функциях и сообщениях, которые мы только что рассмотрели.



Содержание раздела