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