Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с блокировкой Canvas

15K
06 декабря 2007 года
evginho
15 / / 21.08.2006
Есть визуальный компонент (унаследован от TGraphicControl). Внутри компонента существует массив подкомпонентов (не VCL). Они могут получать события типа MouseMove, MouseLeave... если им нужно перерисовать себя то они вызывают специальную процедуру главного компонента.
Все работало нормально пока в одном из подкомпонентов я не начал использовать TTimer (для анимации) - иногда приложение может выводить ошибку "EOutOfResource". Подумалось, что TTimer создает новый тред и в один момент может происходить несколько обращений к Canvas - но использование mutex и canvas lock, unlock во всех процедурах обращающихся к TCanvas никак не помогло.
Буду очень признателен если кто-то подскажет в каком направлении двигаться. А также интересно - событие TTimer.OnTimer запускается в основном треде или в новом?
303
06 декабря 2007 года
makbeth
1.0K / / 25.11.2004
OnTimer - это всего лишь еще один обработчик сообщения (WM_TIMER), и запускается он в контексте основного потока.
Могу предложить решение - вместо рисования в обработчике события, посылать компоненту сообщение WM_PAINT (вызовом Invalidate). Если перерисовка всего компонента не нужна, то можно перерисовать только его часть (InvalidateRect).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог