在CHART组件AfterDraw里画线 窗体大小变了,曲线变了,怎么实现让我画的线也跟着走。
MainChart.Canvas.MoveTo(87,32);//x26
MainChart.Canvas.LineTo(87,-48+MainChart.Height);或者是怎么让曲线变着 我画的线也跟着时间轴走希望大家能理解我在说什么

解决方案 »

  1.   

    你用的是delphi自带的吧,我建议你用第三方控件还可以。
      

  2.   


    跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。
      

  3.   

    计算相对位置即可.
    private
      const XPos = 87;
    private
      FRatio : Double;procedure TForm15.FormCreate(Sender: TObject);
    begin
      //确定比例, 利用该比例计算X值
      FRatio := XPos  / cht1.Width;
    end;procedure TForm15.cht1AfterDraw(Sender: TObject);
    var
      XLine : integer;
    begin
      XLine := Round(cht1.Width * FRatio);
      cht1.Canvas.MoveTo(XLine, 32);
      cht1.Canvas.LineTo(XLine, -48+cht1.Height);
    end;
      

  4.   


    跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。
    这个我明白,我也这样走过,可是走出来线有点歪,应该是时间问题,你可以试下,不是一条直线的
      

  5.   


    方法不行啊,我试过了,chart大小变了他也有变,到那时不是跟着数据变的
      

  6.   


    跟着走,无非是你自己画的线按照某种算法与某个曲线有关系,既然这样你可以增加一个曲线,曲线的值同其他曲线计算的结果相同,让chart自己画比较好。不知这样讲你是否能明白。procedure TFormTest.BitBtn3Click(Sender: TObject);
    var
    Series7: TLineSeries;
    i: Integer;
    begin
    Series7 := TLineSeries.Create(MainChart);
    for i := 1 to DStringGrid.RowCount -1 do begin     Series7.Add(0,'',clRed);
         if i = 50 then begin
         Series7.Add(150,'',clRed);
         end;end;MainChart.AddSeries(Series7);这个是按你的方法弄出来的,线不直
      

  7.   


    方法不行啊,我试过了,chart大小变了他也有变,到那时不是跟着数据变的上边的是计算相对位置.
    要跟着时间轴走, 依据的计算数据是不一样的
    procedure TForm15.cht1AfterDraw(Sender: TObject);
    var
      nCounter : integer;
    begin
      if Series1.XValues.Count < 4 then
        exit;  nCounter := Series1.CalcXPos(2);
      cht1.Canvas.Pen.Color := clRed;
      cht1.Canvas.MoveTo(nCounter, Series1.CalcYPosValue(536));
      cht1.Canvas.LineTo(nCounter, Series1.CalcYPosValue(504));  nCounter := Series1.CalcXPos(3);
      cht1.Canvas.Pen.Color := clGreen;
      cht1.Canvas.MoveTo(nCounter, Series1.CalcYPosValue(Series1.MinYValue));
      cht1.Canvas.LineTo(nCounter, Series1.CalcYPosValue(Series1.MaxYValue));end;
      

  8.   

    Series1.CalcYPosValue(536));   请问参数536是什么意思啊