【问题标题】:Delphi XE3 TStatusBar RedrawDelphi XE3 TStatusBar 重绘
【发布时间】:2014-01-05 14:40:24
【问题描述】:

我似乎无法让状态栏更新/刷新/重绘:

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

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

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

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

【问题讨论】:

    标签: delphi delphi-xe3


    【解决方案1】:

    我假设TopFormmlcmpStatusPanel1 的类型是TStatusBar

    您不发送WM_PAINTWM_ERASEBKGND 消息。系统会这样做。

    您的代码:

    TopFormmlcmpStatusPanel1.Invalidate;
    

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

    您也可以使用:

    TopFormmlcmpStatusPanel1.Refresh;
    

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

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


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

    【讨论】:

    • 状态栏是通过owner draw生成的。
    • 我也尝试过无效和刷新,但两个命令都不起作用。
    • 无效和刷新都会导致绘制周期。也许您的所有者绘制代码有问题。您没有出示 SSCCE。另外,TopFormmlcmpStatusPanel1 是什么类型?我假设它是 TStatusBar。对吗?
    • 这是一个 TStatusBar。状态栏最初可以正常工作,但是当您更改颜色时它不会刷新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多