1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| type
TfrmMain = class(TForm)
...
private
{ Déclarations privées }
public
procedure createchart();
procedure ChartMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ChartMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
end;
var
frmMain: TfrmMain;
chart:Tchart;
clickedSerie:boolean;
SIndex:integer; //Index lors du click
implementation
uses chart,teeprocs, TeEngine,Series,TeCanvas;
procedure TfrmMain.createchart();
var s:TChartSeries;
begin
chart := tchart.Create(self);
with chart do
begin
//Placement dans l'élément parent
Parent:=self;
Left:=10;
top:=10;
width:=self.width - 20;
height:=self.height-20 ;
Visible:=true;
View3D:=false; //ça fait moche avec les points sinon
//événements
OnClickSeries:=chartClickSeries;
OnMouseUp:=chartMouseUp;
OnMouseMove:=chartMouseMove;
end;
Chart.SeriesList.Clear;
s:=TLineSeries.Create(Self);
s.parentChart:=chart;
s.Title:='Série test';
TLineSeries(s).Pointer.Visible:=true;
TLineSeries(s).Pointer.Brush.Color:=clRed; //permet d'afficher des carré aux points des séries, plus pratique pour le click
s.Add(5039.343,'valeur1');
s.Add(54329.343,'valeur2');
s.Add(5031.343,'valeur3');
//initialisation
clickedSerie:=false;
SIndex:=-1;
end;
procedure TfrmMain.ChartClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
clickedSerie:=true;
sindex:=ValueIndex;
end;
procedure TfrmMain.ChartMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if not clickedSerie or (SIndex <0) then
begin
clickedSerie:=false;
sindex:=-1;
exit;
end
else
begin
clickedSerie:=false;
{*****************************************
J'utilises la première série du graphique, si on a plusieurs séries, il faudrait tester toutes les séries a la valeur SIndex, et comparer la valeur ValueIndex avec calcPosPointY pour savoir sur laquelle on a cliqué.
*****************************************}
chart.series[0].ValuesLists.ValueList[1].Value[sindex]:=chart.LeftAxis.CalcPosPoint(Y); //Le valuelist[0] contient la légende
chart.Repaint;
end;
end;
procedure TfrmMain.ChartMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); //permet de déplacer la courbe en temps réel, mais utilise un peu de ressources.
begin
if not clickedSerie or (SIndex <0) then exit
else
begin
chart.series[0].ValuesLists.ValueList[1].Value[sindex]:=chart.LeftAxis.CalcPosPoint(Y);
chart.Repaint;
end;
end; |
Partager