Delphi XE3 TStatusBar重绘

时间:2014-01-05 14:40:24

标签: delphi delphi-xe3

我似乎无法获得更新/刷新/重绘的状态栏:

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

在另一种情况下,我尝试过:

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

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

1 个答案:

答案 0 :(得分:0)

我假设TopFormmlcmpStatusPanel1的类型为TStatusBar

您不发送WM_PAINTWM_ERASEBKGND条消息。系统就是这么做的。

您的代码:

TopFormmlcmpStatusPanel1.Invalidate;

将导致新的涂料循环。下一次清空消息循环时,将生成一个绘制周期,并重新绘制控件。

或者您可以使用:

TopFormmlcmpStatusPanel1.Refresh;

如果您想立即重新绘制控件。

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


在评论中,您声明您的控件是所有者绘制的。可以想象,您的所有者绘制代码有错误。我显然无法评论我无法观察到的代码。但是,我会重新声明InvalidateRefresh方法都会导致绘制周期。