2016-10-05 7 views
1

TChoomDragTool을 TChart에 추가하는 방법을 알아 내려는 데 어려움이 있습니다. TChart는 확대/축소를 지원한다는 점을 알고 있지만, 동시에 패닝 (오른쪽 클릭으로 드래그)을 비활성화하려고합니다. 확대/축소를 비활성화하는 속성이 있지만 패닝을 비활성화하는 간단한 방법은 없습니다.Lazarus TAChart 런타임에 TChartToolSet과 TZoomDragTool을 추가하십시오.

내가 알아 낸 것은 TChartToolSet을 차트에 추가하면 확대/축소 및 패닝 기능이 모두 비활성화된다는 것입니다. TChootToolSet에 TZoomDragTool을 추가 할 수 있다면 원하는대로 할 수 있습니다. 그것은 디자인 타임에 그것을하면 잘 작동하지만, 런타임에 어떻게 해야할지 모르겠다.

누군가가 나를 어떻게하는지 보여줄 수 있다면 좋겠다.

작은 코드 스 니펫이 있으며 실행하면 오류가 발생합니다.

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; 

답변

3

TAChart는 TChartToolset에 (a TIndexedComponent 임) TChartTool 추가 약간 이상한 멀다. TChartToolsetTIndexedComponentList, Tools이며 컬렉션과 유사하며 어려움을 겪고있는 모든 코드는 메서드를 호출하여 TIndexedComponentListTIndexedComponent을 추가하기 만하면됩니다. 그러나 이것이 모든 작업을 수행하는 것은 아닙니다. 대신 TChartTool에는 양식에 추가 한 TChartToolset 구성 요소에 할당해야하는 공용 속성 Toolset이 있습니다.

이 올바른 코드는 다음 ChartTools 게다가

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; 

, 동일한 코드는 런타임 생성 ChartTransformations 위해도 필요합니다.

+0

당신은 m_zoom.toolset : = m_toolset;이라고 말하고자했습니다. 권리? 그것은 효과가 있었다. 고맙습니다. 게시물을 수정하십시오. 대답으로 선택하겠습니다. –

+0

나를 고쳐 주셔서 고맙습니다 - 고쳐졌습니다. –