Lazarus TAChart在运行时添加TChartToolSet和TZoomDragTool

时间:2016-10-05 12:06:38

标签: runtime lazarus teechart

我无法弄清楚如何将TZoomDragTool添加到TChart。我知道TChart已经内置了对缩放的支持,但我想同时禁用平移(右键拖动)。有一个属性可以禁用缩放,但没有直接的方法来禁用平移。

我发现如果我将TChartToolSet添加到图表中,它将禁用内置的缩放和平移功能。如果我可以将TZoomDragTool添加到TChartToolSet,那么它将完成我想要的操作。如果我在设计时这样做会很好,但我不知道如何在运行时这样做。

如果有人可以告诉我该怎么做,请欣赏它。

我有一个小代码片段,如果我运行它会给我错误。

TForm1 = class(TForm)
  Button1: TButton;
  m_chart: TChart;
  m_toolset: TChartToolset;
  m_zoom: TZoomDragTool;  
  procedure Button1Click(Sender: TObject);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin 
  m_chart:= TChart.Create(self);  
  with m_chart do begin
    autosize:= False;
    left:= 10;
    top:= 40;
    width:= 300;
    height:= 150;
    parent:= Self;
    visible:= True;
  end;

  m_toolset:= TChartToolset.Create(m_chart); //is the owner correct?
  m_zoom:= TZoomDragTool.Create(m_toolset);  //is the owner correct?

  m_toolset.Tools.Add(@m_zoom); //is this correct? 

  m_chart.Toolset:= m_toolset; //is this the way?
                               //or something like 
                               //m_chart.Toolset.InsertComponent(m_toolset);
                               //both of them crash 
end;

1 个答案:

答案 0 :(得分:3)

TAChart有点奇怪的方法是向TChartTool添加TIndexedComponentTChartToolset}。 TChartToolsetTIndexedComponentListTools,其行为类似于集合,此处遇到困难的人的所有代码只是将TIndexedComponent添加到TIndexedComponentList 1}}通过调用其Add方法。但是,这并不能完成所有工作。相反,TChartTool有一个公共属性Toolset,您必须将其分配给您添加到表单中的TChartToolset组件。

这是正确的代码:

  m_toolset:= TChartToolset.Create(self); 
    // since ChartTools can be used by several charts it is safer to have the ChartToolset be owned by the form
  m_zoom:= TZoomDragTool.Create(m_toolset); 
  m_zoom.ToolSet := m_toolset;

除ChartTools外,运行时创建的ChartTransformations也需要相同的代码。