请问大侠,在delphi中如何实现动态折线的绘制,就是动态的获取坐标数据,然后连接起来。请问哪位大侠有着方面的源码,或者有这样的控件?!
老板要我交活了,着急啊!!
谢谢!

解决方案 »

  1.   

    Var
      MousePoint: TPoint;
    GetCursorPos(MousePoint);
    这样就能得到当前鼠标的位置,然后再画
      

  2.   

    天.
    MoveTo,LineTo搞定的东西,还要源代码
      

  3.   

    你这样,
    你不是要画线而且在窗口中还要动态走动,
    根据你取样的频率,设置一个坐标数组(就是你那窗口多少个坐标点左右),
    然后定时减x轴,当第二个小于0时候,就整体左移一个元素,右边的填入新的坐标.
    在窗体重画的时候,MoveTo第一个点,然后依次在DC上lineTo其他点.
    基本上你估计你的程序只需要一个y坐标,x是不需要的,因为是时间相关.
      

  4.   

    banxian(曾半仙)
    谢谢你的指点,不过要是我需要的频率交快,也就是说点比较多,在重画窗体的时候会不会太慢了,而且我需要一个大数组来记录点的Y坐标。
    你是这个意思吗?
      

  5.   

    基本是这样的,所以才尽量用API快一些.
    当然你直接用Canvas的方法会慢,究竟慢多少我没试过也不知道,
    那个数组就当是一个FIFO的缓冲好了,你的数据多,用数组也许正合适.
    只不过我开始想的减坐标的方法不太合适了,你的点如果特别多(几百个),
    还是设一个偏移变量,设了也是为了图形移动平稳,要是不要平稳,那在新增数据时候判断要省事的多,我估计每秒上百点也没事的.
    也有资料说要先在CreateComplitableDC以后在内存画完直接拷贝到窗体,
    能减少闪烁,我做了一些小面积(400*400一下)的程序,感觉没啥效果,呵呵.
    郁闷,正忙着几个后台,要命的是PHP我又手生了,不然给你写段例子了
      

  6.   

    http://www.codeidea.com
    上有一个TPolyline组件,质量还可以。就是要收费的。
      

  7.   

    1.设置一个有点(Tpoints)对列指针的对象,记录显示点.
    2.随着点的改变,重画canvas.
    3.可以采用双缓冲的办法.如;设置一缓冲位图,重画时做位图拷贝即可.
    4.纪录y值,也可以用缓冲的方法,设置一个定时器,一定时间,清仓到硬盘。
    5.很容易。
      

  8.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      MyCanvas: TControlCanvas;
    begin
      MyCanvas:=TControlCanvas.Create;
      Mycanvas.control:=memo1;//想在memo1上作画
      With Mycanvas do
      Begin
       pen.color:=clyellow;
        begin
          Brush.Color := clBtnFace;  //
          MoveTo ( 33, 0 );
          Brush.Color := clWhite;  // 
          LineTo ( 33, ClientHeight );
        end;
    End;  
    end;
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ptArray : array[0..9] of TPOINT;
      PtCounts : array[0..1] of integer;
    begin
      PtArray[0] := Point(0,   0);
      PtArray[1] := Point(0,  100);
      PtArray[2] := Point(100, 100);
      PtArray[3] := Point(100,  0);
      PtArray[4] := Point(0,   0);
      PtCounts[0] := 5;
      PtArray[5] := Point(25, 25);
      PtArray[6] := Point(25, 75);
      PtArray[7] := Point(75, 75);
      PtArray[8] := Point(75, 25);
      PtArray[9] := Point(25, 25);
      PtCounts[1] := 5;
      PolyPolygon(Form1.Canvas.Handle,
                          PtArray,
                          PtCounts,
                          2);
    end;