Избежание необходимости вызывать ProcessMessages
У меня есть компонент, который я создал, который встраивает аппаратно-ускоренный рендер в TWinControl, чтобы вы могли поместить его в форму. В большинстве случаев он работает довольно хорошо, но если я пытаюсь изменить размер элемента управления, все становится пустым, пока цикл сообщений не запустится и не вызовет WndProc для средства визуализации, которое размещено во внешней DLL. Это означает, что мне нужно явно вызывать Application.ProcessMessages после изменения размера элемента управления в коде, что, как я знаю, считается плохой практикой.
Есть ли способ поместить некоторую логику в сам элемент управления, чтобы он вызывал WndProc в DLL, когда я изменяю размер элемента управления, поэтому мне не нужно вызывать ProcessMessages, чтобы заставить вещи отображаться правильно?
2 ответа
Вы могли бы позвонить TWinControl.Update
вместо этого, который должен просто SendMessage событие WM_PAINT, чтобы вы не обрабатывали произвольные сообщения.
Правильным решением является вызов InvalidateRect при изменении размера. Затем Windows отправит вам сообщение WM_PAINT. Для справки вы должны снять Petzold с полки и прочитать его главу о живописи.