2016-10-05 5 views
1

Je n'arrive pas à comprendre comment ajouter TZoomDragTool à un TChart. Je sais que TChart a intégré le support du zoom, mais je veux désactiver le panoramique (glisser avec le clic droit) en même temps. Il existe une propriété permettant de désactiver le zoom, mais pas de façon directe de désactiver le panoramique.Lazarus TAChart ajouter TChartToolSet et TZoomDragTool à l'exécution

Ce que j'ai découvert, c'est que si j'ajoute un TChartToolSet au graphique, il va désactiver à la fois les fonctions intégrées de zoom et de panoramique. Si je peux ajouter un TZoomDragTool à TChartToolSet, alors il fera ce que je veux. Cela fonctionne bien si je le fais au moment de la conception, mais je ne sais pas comment le faire au moment de l'exécution.

Appréciez-le si quelqu'un pouvait me montrer comment le faire.

J'ai un petit fragment de code et il me donne des erreurs si je l'exécute.

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; 

Répondre

3

TAChart a un peu étrange façon d'ajouter un TChartTool (qui est un TIndexedComponent) à la TChartToolset. Le TChartToolset a un TIndexedComponentList, Tools, qui agit comme une collection, et tout le code des personnes ayant des difficultés ici consiste simplement à ajouter le TIndexedComponent au TIndexedComponentList en appelant sa méthode Add. Cependant, cela ne fait pas tout le travail. Au lieu de cela, le TChartTool a une propriété publique Toolset que vous devez affecter au composant TChartToolset que vous avez ajouté au formulaire.

Ceci est le code correct:

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; 

Outre les ChartTools, le même code est également nécessaire pour ChartTransformations créé l'exécution.

+0

Vous vouliez dire m_zoom.toolset: = m_toolset; droite? Ça a marché. Je vous remercie. S'il vous plaît corriger le poste. Je vais le sélectionner comme réponse. –

+0

Merci de m'avoir corrigé - corrigé. –