请问大侠,在delphi中如何实现动态折线的绘制,就是动态的获取坐标数据,然后连接起来。请问哪位大侠有着方面的源码,或者有这样的控件?!
老板要我交活了,着急啊!!
谢谢!
老板要我交活了,着急啊!!
谢谢!
解决方案 »
- 如何在代码中动态设置在打印机的服务器属性中自定义的纸张大小?
- delphi form切换问题
- Delphi中如何判断某个Object是XX接口的一个实例?
- 小女子向各位大虾求一段字符串转换的代码,请大家帮帮忙啊!
- 如何让flash控件右幾彈出自己的菜單
- 哪里有DELPHI5企业版下载?谢谢!
- 为什么获取Intel的CPUId是一样的1674、1、0、58980863?
- 一个有关桌面数据库的问题?
- 字符转换
- 如何在程序中显示键盘状态?
- 调用其他语言dll出现access violation ataddress问题
- 在mainmenu控件中,如何在点击某个菜单项时知道它的绝对索引值及CAPTION?
MousePoint: TPoint;
GetCursorPos(MousePoint);
这样就能得到当前鼠标的位置,然后再画
MoveTo,LineTo搞定的东西,还要源代码
你不是要画线而且在窗口中还要动态走动,
根据你取样的频率,设置一个坐标数组(就是你那窗口多少个坐标点左右),
然后定时减x轴,当第二个小于0时候,就整体左移一个元素,右边的填入新的坐标.
在窗体重画的时候,MoveTo第一个点,然后依次在DC上lineTo其他点.
基本上你估计你的程序只需要一个y坐标,x是不需要的,因为是时间相关.
谢谢你的指点,不过要是我需要的频率交快,也就是说点比较多,在重画窗体的时候会不会太慢了,而且我需要一个大数组来记录点的Y坐标。
你是这个意思吗?
当然你直接用Canvas的方法会慢,究竟慢多少我没试过也不知道,
那个数组就当是一个FIFO的缓冲好了,你的数据多,用数组也许正合适.
只不过我开始想的减坐标的方法不太合适了,你的点如果特别多(几百个),
还是设一个偏移变量,设了也是为了图形移动平稳,要是不要平稳,那在新增数据时候判断要省事的多,我估计每秒上百点也没事的.
也有资料说要先在CreateComplitableDC以后在内存画完直接拷贝到窗体,
能减少闪烁,我做了一些小面积(400*400一下)的程序,感觉没啥效果,呵呵.
郁闷,正忙着几个后台,要命的是PHP我又手生了,不然给你写段例子了
上有一个TPolyline组件,质量还可以。就是要收费的。
2.随着点的改变,重画canvas.
3.可以采用双缓冲的办法.如;设置一缓冲位图,重画时做位图拷贝即可.
4.纪录y值,也可以用缓冲的方法,设置一个定时器,一定时间,清仓到硬盘。
5.很容易。
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;
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;