Проблема с блокировкой Canvas
Все работало нормально пока в одном из подкомпонентов я не начал использовать TTimer (для анимации) - иногда приложение может выводить ошибку "EOutOfResource". Подумалось, что TTimer создает новый тред и в один момент может происходить несколько обращений к Canvas - но использование mutex и canvas lock, unlock во всех процедурах обращающихся к TCanvas никак не помогло.
Буду очень признателен если кто-то подскажет в каком направлении двигаться. А также интересно - событие TTimer.OnTimer запускается в основном треде или в новом?
Могу предложить решение - вместо рисования в обработчике события, посылать компоненту сообщение WM_PAINT (вызовом Invalidate). Если перерисовка всего компонента не нужна, то можно перерисовать только его часть (InvalidateRect).