2014-01-05 47 views
-1

我似乎无法得到状态栏更新/刷新/重绘:德尔福XE3 TStatusBar重绘

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

在另一个场景中我曾尝试:

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

我只是想重绘状态栏与更新的颜色。

回答

0

我假设TopFormmlcmpStatusPanel1TStatusBar类型。

您不发送WM_PAINTWM_ERASEBKGND消息。系统做到了。

您的代码:

TopFormmlcmpStatusPanel1.Invalidate; 

将导致一个新的油漆循环。当消息循环下一次清空时,将产生一个绘画循环并且控件将被重新绘制。

或者您可以使用:

TopFormmlcmpStatusPanel1.Refresh; 

如果你想控制,应立即重新上漆。

所以,我想你的问题比你想象的更微妙。我的期望是,您的控件是由系统使用系统主题绘制的。而您尝试改变颜色根本无法产生任何效果,因为主题会覆盖控件的颜色属性。没有SSCCE,很难确定这是否是问题。


在评论中您声明您的控件是所有者绘制的。可以想象,你的老板画代码有问题。我显然无法评论我无法观察到的代码。但是,我会重申一个事实,即InvalidateRefresh方法都会导致绘制循环。

+0

状态栏是通过所有者绘制生成的。 –

+0

我也尝试了无效和刷新,并没有任何命令工作。 –

+0

“无效”和“刷新”都会导致绘画循环。也许你的老板画代码有问题。你没有出席SSCCE。另外,TopFormmlcmpStatusPanel1是什么类型?我假设它是TStatusBar。那是对的吗? –