Delphi 德尔福XE3 TStatusBar重画
我似乎无法使状态栏更新/刷新/重画:Delphi 德尔福XE3 TStatusBar重画,delphi,delphi-xe3,Delphi,Delphi Xe3,我似乎无法使状态栏更新/刷新/重画: TopFormmlcmpStatusPanel1.Invalidate; SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_PAINT, WParam(0), LParam(0)); 在另一个场景中,我尝试过: SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_ERASEBKGND, WParam(0), LParam(0)); 我只想用更新的颜色重新绘
TopFormmlcmpStatusPanel1.Invalidate;
SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_PAINT, WParam(0), LParam(0));
在另一个场景中,我尝试过:
SendMessage(TopFormmlcmpStatusPanel1.Handle, WM_ERASEBKGND, WParam(0), LParam(0));
我只想用更新的颜色重新绘制状态栏。我假设
TopFormmlcmpStatusPanel1
是TStatusBar
类型
您不发送WM_PAINT
或WM_ERASEBKGND
消息。系统就是这样做的
您的代码:
TopFormmlcmpStatusPanel1.Invalidate;
将导致一个新的油漆周期。当消息循环下一次清空时,将生成绘制循环,并重新绘制控件
或者,您可以使用:
TopFormmlcmpStatusPanel1.Refresh;
如果希望立即重新绘制控件
所以,我想你的问题比你想象的更微妙。我期望您的控件由系统使用系统主题绘制。而您更改颜色的尝试根本无法产生任何效果,因为主题会覆盖控件的颜色属性。没有SSCCE,很难确定这就是问题所在
在注释中,您声明控件是所有者绘制的。可以想象,您的所有者绘制代码有一个错误。我显然无法对我无法遵守的准则发表评论。但是,我要重新声明一个事实,即
Invalidate
和Refresh
方法都会导致绘制周期。状态栏是通过所有者绘制生成的。我还尝试了Invalidate和Refresh,但两个命令都不起作用。Invalidate和Refresh都会导致绘制周期。也许您的所有者绘制代码有一个错误。你没有出席SSCCE。另外,TopFormmlcmpStatusPanel1是什么类型的?我猜是TStatusBar。对吗?那是一个TStatusBar。状态栏最初工作正常,但更改颜色时不会刷新。