【问题标题】:Display label in front of bar graph在条形图前面显示标签
【发布时间】:2010-11-08 07:10:12
【问题描述】:

我有一个问题,我的 TChart 附带的“标记”隐藏在栏后面......我添加了标记,它在栏后面绘制了自己。有什么办法把它放在前面吗?我希望任何人都可以帮助我..谢谢

【问题讨论】:

  • 如果您还可以让我们知道您用于图表的组件,那将非常有帮助。

标签: delphi


【解决方案1】:

我不知道您的图表条实例化的类是什么,但我知道 TLabel 是 TGraphicControl 的后代。从 TGraphicControl 继承的控件没有任何窗口句柄;因此,它们的父级负责在自己的画布上绘制它们。

当您在表单上放置标签时,表单是标签的父级,并将在其自己的画布上绘制标签。如果您放置一个窗口控件(从 TWinControl 类派生的控件,例如 TButton 或 TProgressBar),它们会在父画布上处理自己的绘图。这意味着,TGraphicControl 的后代将始终绘制在具有相同父窗口的 TWinControl 类的后代之后。

对您来说最简单的解决方案是使用 TStaticText,它提供与 TLabel 相同的功能,但它是 TWinControl 的后代。

可能还有其他适合您的解决方案,例如:您可以在表单上放置一个面板,然后将标签添加到面板,然后将面板置于前面,以将其显示在图表栏上方。当您将标签添加到面板时,其父级将设置为该面板控件,并且面板将负责绘制标签;或者您将图表栏设置为标签的父级;或者派生一个新的图形条类,并处理其 Paint 方法以直接在其画布上绘制文本。

【讨论】:

  • TStaticText 是一个真正的 TWinControl,可以用来代替 TLabel。
  • 我想你误会了,它是 TChart 附带的“标记”。我添加了标记,它在栏杆后面画了自己。有什么办法可以把它放在前面?
【解决方案2】:

好的,现在我知道出了什么问题。您有三个条形系列,但第三个是从第二个中提取的标记。填满你的 3 bar 系列后尝试:

barseries2.marks.visible:=False;
barseries2.marks.visible:=True;

这应该重新绘制标记(虽然未经测试)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2018-07-24
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多