在纵横坐标图中,固定几个点,然后根据几个点的位置画出平滑的线来?在什么上画?如何实现?最好有个例程!我可以另外开贴加分!

解决方案 »

  1.   

    学delphi的没有能解决这个问题吗?看你们的回答,说是可以在canvas上画,请问canvas控件在哪一个里面?
      

  2.   

    {*******************************************************************************
                   按钮1的事件和计时器1---为扫描线形式
    *******************************************************************************}
    procedure TFrm_LeftScrollCurve.Button1Click(Sender: TObject);
    begin
      //如果没有下面的话,则背景默认为白色的
      Image1.Canvas.Brush.Style := bsClear;  Image1.Canvas.Brush.Color := clblack;
      Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));       DoubleBuffered := true;//消除闪烁效果很好
      scan_x := 0;//扫描线从最左边开始
      start := 0;
      data := Trunc(Image1.Height / 2);//初始化sin的值在图形控件的中间
      Timer1.Enabled := true;
    end;procedure TFrm_LeftScrollCurve.Timer1Timer(Sender: TObject);
    var
      input: double;//sin函数的自变量
    begin
      Image1.Canvas.Pen.Style := psSolid;
      Image1.Canvas.Pen.Width := 3;
      Image1.Canvas.Pen.Color := clblack;
      Image1.Canvas.MoveTo(scan_x, Image1.Height);
      Image1.Canvas.LineTo(scan_x, 0);  Image1.Canvas.Pen.Color := cllime;
      Image1.Canvas.MoveTo(scan_x - 5, Trunc(data));
      input := (start / Image1.Height) * 2 * pi;
      data := Sin(input);
      data := (1 - data) * Image1.Height / 2;
      Image1.Canvas.LineTo(scan_x - 5, Trunc(data));  scan_x := scan_x + 1;
      start := start + 1;
      if scan_x > Image1.Width then scan_x := 0; 
    end;