Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top