2014-01-05 4 views
-1

Я не могу показаться, чтобы получить строку состояния для обновления/обновления/перерисовки:Delphi XE3 TStatusBar Redraw

TopFormmlcmpStatusPanel1.Invalidate; 
    SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_PAINT, WParam(0), LParam(0)); 

В другом сценарии я пытался:

SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_ERASEBKGND, WParam(0), LParam(0)); 

Я просто хочу, чтобы перерисовать строку состояния с обновленными цветами.

ответ

0

Я предполагаю, что TopFormmlcmpStatusPanel1 имеет тип TStatusBar.

Вы не отправляете WM_PAINT или WM_ERASEBKGND сообщений. Система делает это.

Ваш код:

TopFormmlcmpStatusPanel1.Invalidate; 

приведет к новому циклу краски. Когда цикл сообщения будет опущен, будет создан цикл рисования, и элемент управления будет перекрашен.

В качестве альтернативы можно использовать:

TopFormmlcmpStatusPanel1.Refresh; 

, если вы хотите, чтобы контроль быть повторно окрашены сразу.

Итак, я думаю, ваша проблема более тонкая, чем вы думаете. Мое ожидание состоит в том, что ваши элементы управления рисуются системой, используя системную тему. И ваши попытки изменить цвет просто не могут иметь никакого эффекта, потому что тема переопределяет цветовые свойства элемента управления. Без SSCCE трудно быть уверенным, что это проблема.


В комментариях указано, что ваш элемент управления является владельцем. Вполне возможно, что код вашего владельца рисует ошибку. Я явно не могу прокомментировать этот код, который я не могу наблюдать. Тем не менее, я бы переформулировал тот факт, что методы Invalidate и Refresh приведут к циферблату краски.

+0

Строка состояния была произведена путем жеребьевки владельца. –

+0

Я также попытался сделать Invalidate и обновить, и ни одна команда не работала. –

+0

Как Invalidate, так и Refresh будут приводить к циклам рисования. Возможно, у вашего владельца кода есть ошибка. Вы не представили SSCCE. Кроме того, какой тип TopFormmlcmpStatusPanel1? Я предположил, что это TStatusBar. Это верно? –

Смежные вопросы