1

我正在尝试使用堆叠系列创建条形图。每个酒吧由两部分组成。主要部分有正常颜色和黑色边框,“超限”部分有更亮的颜色和红色边框。在 IDE (Delphi XE3) 中配置此行为没有问题。当我的“超限”条太小时,配置的行为开始变得糟糕。如果此条高 1px,则红色边框消失,仅渲染 1px 画笔颜色线。我需要渲染边框颜色线。所以我试图改变这个栏的颜色。

这是我的代码的一部分:

Series1.AddY((RamTotal-RamAvailable-memover) / mb, titlemem);
if memover > 0 then
  Series2.AddY(memover / mb, titlememover);
if (memover > 0) and (Series2.CalcBarBounds(0).Height <= 2) then
  Series2.ValueColor[0] := FSmallOverColor;

问题在于 CalcBarBounds 函数。只有在图表已经显示后它才会返回正确的值。它第一次返回 0。这导致将边框颜色应用于每个“超出限制”栏,而不管它在第一次显示时的高度。当我按下清除所有系列并调用与以前相同的代码的重新加载按钮时,一切看起来都很好。如果我从代码中调用 reload,它就不起作用。调用刷新、重绘或任何无济于事的方法。尝试在 AfterDraw 事件上更改颜色也不起作用。

每个系列只有一个值。我有 TeeChart Standard v2012.06.120613 32bit。

4

1 回答 1

1

问题在于 CalcBarBounds 函数。只有在图表已经显示后它才会返回正确的值。它第一次返回 0。这导致将边框颜色应用于每个“超出限制”栏,而不管它在第一次显示时的高度。当我按下清除所有系列并调用与以前相同的代码的重新加载按钮时,一切看起来都很好。如果我从代码中调用 reload,它就不起作用。

您可能必须在调用之前强制重新绘制图表CalcBarBounds。在图表完成第一次绘制之前,某些内部值未初始化或没有有效值。

调用刷新、重绘或任何无济于事的方法

你试过调用Draw函数吗?

于 2013-04-05T13:55:43.750 回答