Когда вызывается TGraphicControl.Paint? - PullRequest
0 голосов
/ 23 февраля 2009

Я пытаюсь написать собственный потомок TGraphicControl, который позволит пользователю вставлять поверхность визуализации SDL в форму VCL. Это обеспечит простой способ отображения анимации SDL в форме.

Видимо, TGraphicControl перерисовывается с помощью метода Paint. Как часто это называется? Только когда случается что-то, что лишает законной силы элемент управления, или есть другие вещи, которые его вызывают? Как это взаимодействует с чем-то, что делает свой собственный рисунок?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2009

Метод Paint неоконный элемента управления (которым является TGraphicControl) вызывается, когда оконный элемент управления под ним перерисовывается. Это происходит при обработке сообщения WM_PAINT для оконного элемента управления.

Оконный элемент управления перерисовывается либо тогда, когда вся его область или его части были признаны недействительными, либо когда другое окно, расположенное выше в Z-порядке, закрыто или перемещено, так что окно становится доступным и нуждается в перерисовке.

При аннулировании TGraphicControl будет вычислена соответствующая часть оконного родительского элемента управления, и эта часть станет недействительной.

Если вам нужен TGraphicControl для перерисовки, вам нужно вызвать Invalidate для него или его родительского элемента управления. Другого способа вызвать перерисовку нет.

1 голос
/ 24 февраля 2009

Вопрос 1: Как часто это вызывается?

См. Ответ Mghie: всякий раз, когда родительский оконный элемент управления обрабатывает сообщение WM_PAINT

Вопрос 2: Это только когда что-то случится с лишить законной силы контроль, или там другие вещи, которые это называют?

См. Ответ Mghie: только когда он признан недействительным

Вопрос 3: Как которые взаимодействуют с чем-то, что делает свой рисунок?

Вы должны поместить свою собственную процедуру рисования в метод Paint потомка TGraphicControl - используя директиву override. Рисование в методе Paint не отправит другое сообщение WM-PAINT. В методе Paint вы можете рисовать на холсте, не входя в цикл сообщений WM-PAINT. Сделайте ваш код для рисования как можно быстрее, потому что может быть довольно много сообщений WM-PAINT. Если процедура рисования занимает много времени, ваше приложение будет отображаться вяло / не реагировать.

...