【问题标题】:Teechart VCL - how to change Marks border color and mark length at runtime?Teechart VCL - 如何在运行时更改标记边框颜色和标记长度?
【发布时间】:2020-05-29 23:50:28
【问题描述】:

我正在使用带有 Teechart 组件的 Delphi 10.3-upd 1。

在运行时,我需要为特定点添加标记并自定义其文本、颜色和大小。我已成功使用以下命令更改文本:

Chart1.[idxserie].Marks.Item[idxelement].Visible  := True;
Chart1.[idxserie].Marks.Iidxelement]].Font.Color  := clRed;
Chart1.[idxserie].Marks.item[idxelement].Text.Add('My text is here');

现在我需要更改将文本链接到图形曲线中的点的线的颜色。在设计时,此属性位于:

编辑图表窗口:

      Series -- myserie1 -
                tab : Marks 
                           -- tab Arrows
                                         -- tab Border 
                                                     tab  -- Format     
                                                                 Button : Color 

如何在运行时访问和更改此属性的值?

我已经试过了:

Chart1.[idxserie].Marks.Arrow.Color  := clRed  // ==> nothing changed ! 

这是我在设计时更改属性的地方:

在下图中,我想要不同颜色的一些点的虚线红线。当我使用 Chart1.[idxserie].Marks.Arrow.Color := clRed 它会改变所有点的颜色。

感谢您的支持。

谢谢。

【问题讨论】:

  • @JRC, series1.Marks.Arrow.Color := clRed;为我工作
  • @Reron,事实上,当我发出这个命令时,它会影响该系列的所有标记,但我只想更改某些特定标记的颜色,例如,我想要的第 10 点标记clGreen 和点 14 的标记 clRed。我不能那样做!我希望有一个影响 item 箭头颜色的命令,这样的命令看起来像 Chart1.[idxserie].Marks.item[idxelement].Arrow.Color := clRed .

标签: delphi teechart


【解决方案1】:

箭头是全球性的。 您可以使用 Series 或 Chart 的 AfterDraw 事件之一自己覆盖它。

一个例子: 创作:

procedure TForm1.FormCreate(Sender: TObject);
begin
  series1.FillSampleValues(5);
  series1.Marks.Visible := true; // A global flag. if false, no Mark will be visible

  series1.Marks[0].Visible := false;
  series1.Marks[1].Visible := true;
  series1.Marks[2].Visible := false;
  series1.Marks[3].Visible := true;
  series1.Marks[4].Visible := false;

  series1.Marks[3].Font.Color := clRed;
  series1.Marks[3].Font.Style := [fsBold];
  series1.Marks[3].Transparent:= true;

  series1.Marks.Arrow.Color    := clGreen;
  series1.Marks.ArrowLength    := 24;
  series1.Marks.Arrow.EndStyle := esFlat;
  series1.Marks.Arrow.Visible  := true;
end;

现在,在图表画布上画一条线:

procedure TForm1.Series1AfterDrawValues(Sender: TObject);
var
  nInx, nX, nY: integer;
begin
  for nInx := 0 to Series1.Count-1 do
    if Series1.Marks[nInx].Font.Color = clRed then
      begin
        nX := Series1.CalcXPos(nInx);
        nY := Series1.CalcYPos(nInx);
        Chart1.Canvas.Pen.Color := clRed;
        Chart1.Canvas.MoveTo(nX, nY);
        Chart1.Canvas.LineTo(nX, nY - series1.Marks.ArrowLength);
      end;
end;

您将获得:

【讨论】:

  • 提示。我已经尝试过您建议的这种方式,但是它会同时更改所有标记。我无法仅更改某些特定点的箭头长度和颜色。
猜你喜欢
  • 1970-01-01
  • 2023-01-28
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2017-03-10
相关资源
最近更新 更多