2017-11-16 2 views
0

Delphi 10.1에 기본 TeeChart 버전이 있습니다. LineSeries를 두 번 클릭하면 점과이 계열의 표시를 토글합니다. 커서 값도 표시합니다. 그러나 둘 사이에 시프트가 있으며, 동일하지 않습니다.TeeChart LineSeries의 XY 값과 Series Double Click의 커서 값이 다릅니다

procedure TfrmMain.SeriesDblClick(Sender: TChartSeries; ValueIndex: Integer; 
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
var 
    tmpX1,tmpY1,tmpX2,tmpY2:Double; 
begin 
    // First values 
    tmpX1:=Chart.Axes.Bottom.CalcPosPoint(X); 
    tmpY1:=Chart.Axes.Left.CalcPosPoint(Y); 

    // The prevous values are not identical to: 
    tmpX2:=(Sender as tLineSeries).XValue[ValueIndex]; 
    tmpY2:=(Sender as tLineSeries).YValue[ValueIndex]; 
end; 

문제를 해결하는 방법은 무엇입니까?

답변

2

이 문제를 해결할 수 없습니다. 실수 공간에서 정수 화면 공간으로 매핑하고 다시 돌아올 때 정보가 손실됩니다.

CalcPosPoint은 정수 화면 좌표를 가져 와서이를 실제 축 공간에 매핑합니다. 반면에 XValue[]YValue[]은 원래 데이터를 반환합니다.

차트 코드는 XValue[]YValue[]의 실제 값으로 시작합니다. 이들은 정수 값에 매핑됩니다. 그 필요성에 의한 매핑은 실수 축 값으로 변환 된 후에 가장 가까운 정수로 반올림됩니다. 이 시점에서 정보는 손실되고 검색 할 수 없습니다.

생각한 실험으로, 매우 가까운 두 개의 실제 X 값을 고려하십시오. 인수를 위해서 XValue[0] = 0.0XValue[1] = 1e-6을 가정 해 봅시다. X 축의 범위는 0에서 1까지입니다. 이제이 시나리오에서는 화면에 매핑 할 때 두 점이 서로 다른 정수 좌표를 갖기 위해 화면에 1e6 픽셀이 필요합니다. 화면의 픽셀 수가 너무 많아서 실제 X 값이 다른이 두 점은 화면의 동일한 X 좌표로 매핑됩니다.

이 예제에는 사용자가하려는 작업의 가능성을 보여주기를 바랍니다. 가장 좋은 방법은 XValue[]YValue[]의 원시 좌표를 검색하여 (tmpX1, tmpY1)에 대한 종료점을 찾아 가장 가까운 원시 좌표 값을보고하는 것입니다.

관련 문제