Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi TChart中区域序列中的模式_Delphi_Delphi 7_Teechart - Fatal编程技术网

Delphi TChart中区域序列中的模式

Delphi TChart中区域序列中的模式,delphi,delphi-7,teechart,Delphi,Delphi 7,Teechart,我有一个叫TChart和Tariaseries的人。我想将这个系列中的图案更改为后对角线(AreaBrush=BSB对角线),但不是整个系列,我只需要更改一些值。可能吗?我使用Delphi7、Teechart 8。您可以找到一个事件,该事件在每次绘制值时都会触发。然后,您可以使用它更改系列设置(或图表画布设置,具体取决于事件),并根据ValueIndex指定不同的画笔或颜色 在您的情况下,可以使用以下系列“OnGetPointerStyle事件完成此操作: procedure TForm1.Fo

我有一个叫TChart和Tariaseries的人。我想将这个系列中的图案更改为后对角线(AreaBrush=BSB对角线),但不是整个系列,我只需要更改一些值。可能吗?我使用Delphi7、Teechart 8。

您可以找到一个事件,该事件在每次绘制值时都会触发。然后,您可以使用它更改系列设置(或图表画布设置,具体取决于事件),并根据
ValueIndex
指定不同的画笔或颜色

在您的情况下,可以使用以下系列“
OnGetPointerStyle
事件完成此操作:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.View3D:=false;

  with Chart1.AddSeries(TAreaSeries) as TAreaSeries do
  begin
    FillSampleValues(10);
    Pointer.Visible:=true;
    OnGetPointerStyle:=Series1GetPointerStyle;
  end;
end;


function TForm1.Series1GetPointerStyle(Sender: TChartSeries;
  ValueIndex: Integer): TSeriesPointerStyle;
begin
  if ValueIndex=3 then
    (Sender as TAreaSeries).AreaBrush:=bsBDiagonal
  else
    (Sender as TAreaSeries).AreaBrush:=bsSolid;

  result:=psNothing;
end;
注意:在这种情况下,我在
OnGetPointerstyle
事件中更改了
ValueIndex=3
的系列画笔,这些更改在区域段4-5中可见。这是因为在绘制当前区域段之后实际上调用了
OnGetPointerstyle
事件,因此我们设置的笔刷样式将在下次绘制值时应用


编辑:

正如@Michael在评论中注意到的,这个解决方案的唯一问题是如何更改第一段的模式。如果上面的事件允许您将段的模式从ValueIndex+1更改为ValueIndex+2,并且第一次调用时ValueIndex=0,则似乎无法将段的模式从0更改为1

注意:每次绘制序列时,都会为链接序列中的所有点触发
OnGetPointerstyle
事件。第一段是使用系列图案绘制的,因此在开始绘制系列之前,只需确保系列图案具有要设置为第一段的值。有两种方法可以做到这一点:

1) 您可以将上次触发
OnGetPointerstyle
事件(ValueIndex=Sender.Count-1)时要在段0处显示的模式设置为1。此时,所有线段都已绘制,这将仅在下次绘制序列时应用:

uses Series;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.View3D:=false;

  with Chart1.AddSeries(TAreaSeries) as TAreaSeries do
  begin
    FillSampleValues(10);
    Pointer.Visible:=true;
    AreaBrush:=bsBDiagonal;
    OnGetPointerStyle:=Series1GetPointerStyle;
  end;
end;

function TForm1.Series1GetPointerStyle(Sender: TChartSeries;
  ValueIndex: Integer): TSeriesPointerStyle;
begin
  if (ValueIndex=0) or (ValueIndex=Sender.count-1) then
    (Sender as TAreaSeries).AreaBrush:=bsBDiagonal
  else
    (Sender as TAreaSeries).AreaBrush:=bsSolid;

  result:=psNothing;
end;
2) 您可以使用
onbeforedawseries
事件设置第一段的模式:

uses Series;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.View3D:=false;

  with Chart1.AddSeries(TAreaSeries) as TAreaSeries do
  begin
    FillSampleValues(10);
    Pointer.Visible:=true;
    OnGetPointerStyle:=Series1GetPointerStyle;
  end;

  Chart1.OnBeforeDrawSeries:=BeforeDrawSeries;
end;

function TForm1.Series1GetPointerStyle(Sender: TChartSeries;
  ValueIndex: Integer): TSeriesPointerStyle;
begin
  if ValueIndex=0 then
    (Sender as TAreaSeries).AreaBrush:=bsBDiagonal
  else
    (Sender as TAreaSeries).AreaBrush:=bsSolid;

  result:=psNothing;
end;

procedure TForm1.BeforeDrawSeries(Sender: TObject);
begin
  (Chart1[0] as TAreaSeries).AreaBrush:=bsBDiagonal;
end;