2016-10-05 12 views
1

У меня возникли проблемы с поиском, как добавить TZoomDragTool в TChart. Я знаю, что TChart встроил поддержку масштабирования, но я хочу отключить панорамирование (перетаскивание с помощью правого клика) одновременно. Существует свойство отключить масштабирование, но нет прямого способа отключить панорамирование.Lazarus TAChart добавить TChartToolSet и TZoomDragTool во время выполнения

Что я узнал, так это то, что если я добавлю 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; 

ответ

3

TAChart имеет немного странно способ добавления TChartTool (который является TIndexedComponent) к TChartToolset. У TChartToolset есть TIndexedComponentList, Tools, который действует как коллекция, и весь код людей, испытывающих трудности, просто добавляет TIndexedComponent к TIndexedComponentList, вызвав его метод 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.

+0

Вы хотите сказать m_zoom.toolset: = m_toolset; правильно? Это сработало. Спасибо. Пожалуйста, исправьте сообщение. Я выберу его в качестве ответа. –

+0

Спасибо за исправление меня - исправлено. –