我似乎无法获得更新/刷新/重绘的状态栏:
TopFormmlcmpStatusPanel1.Invalidate;
SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_PAINT, WParam(0), LParam(0));
在另一种情况下,我尝试过:
SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_ERASEBKGND, WParam(0), LParam(0));
我只想用更新的颜色重绘状态栏。
答案 0 :(得分:0)
我假设TopFormmlcmpStatusPanel1
的类型为TStatusBar
。
您不发送WM_PAINT
或WM_ERASEBKGND
条消息。系统就是这么做的。
您的代码:
TopFormmlcmpStatusPanel1.Invalidate;
将导致新的涂料循环。下一次清空消息循环时,将生成一个绘制周期,并重新绘制控件。
或者您可以使用:
TopFormmlcmpStatusPanel1.Refresh;
如果您想立即重新绘制控件。
所以,我猜你的问题比你想象的更微妙。我的期望是您的控件由系统使用系统主题绘制。并且您尝试更改颜色根本无法产生任何效果,因为主题会覆盖控件的颜色属性。没有SSCCE,很难确定这是问题所在。
在评论中,您声明您的控件是所有者绘制的。可以想象,您的所有者绘制代码有错误。我显然无法评论我无法观察到的代码。但是,我会重新声明Invalidate
和Refresh
方法都会导致绘制周期。