Teechart VCL - 如何在运行时改变标记边框颜色和标记长度?

问题描述 投票:0回答:1

我在使用Delphi 10.3-upd 1和Teechart组件。

在运行时,我需要为特定的点放置标记,并自定义其文本、颜色和大小。 我已经成功地使用以下命令改变了文本。

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 ! 

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

enter image description here

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

enter image description here

感谢你的支持。

谢谢你的支持。

delphi teechart
1个回答
0
投票

箭头是全局的,你可以使用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;

你会得到:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.