我的代码:
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drawing:=true;
if(drawing)then
begin
paintbox1.Canvas.Pen.Color:=clyellow;
if(x>=length(Y_Values))then
begin
paintbox1.Canvas.MoveTo(Max_Y_Values.x ,Max_Y_Values.y );
paintbox1.Canvas.LineTo(x,y);
setlength(Y_Values,x);
Max_Y_Values.x:=x;
Max_Y_Values.y:=y;
end
else
begin
paintbox1.Canvas .moveto(x,Y_Values[x]);
paintbox1.Canvas .lineto(x,y); end;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X>=0) and (X <=512)) and ((Y>=0) and (Y <=350)) then
begin
label1.Caption :='X:'+inttostr(x)+' Y:'+inttostr(y);
if drawing then
begin
Y_Values[x]:=y;
Timer1.Enabled :=true;
end;
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
扫描屏幕,并得到整个屏幕的像素点,放在数组Y_Values[x]:=y
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:word;
begin
paintbox1.Refresh;
image1.Picture.Bitmap.LoadFromFile('1.bmp');//整个屏幕擦除
paintbox1.Canvas.MoveTo(Zero ,Y_Values[Zero] );
for i:=1 to Max_Y_Values.x do
begin
paintbox1.Canvas.LineTo(i,Y_Values[i]);
end;
end;
问题:鼠标移动快,捕捉到的点太少,而且鼠标按下移动过程只能看到很闪的波形,等鼠标停下来的时候,只剩下一个被擦除了的屏幕,没有波形。请大家提提建议
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drawing:=true;
if(drawing)then
begin
paintbox1.Canvas.Pen.Color:=clyellow;
if(x>=length(Y_Values))then
begin
paintbox1.Canvas.MoveTo(Max_Y_Values.x ,Max_Y_Values.y );
paintbox1.Canvas.LineTo(x,y);
setlength(Y_Values,x);
Max_Y_Values.x:=x;
Max_Y_Values.y:=y;
end
else
begin
paintbox1.Canvas .moveto(x,Y_Values[x]);
paintbox1.Canvas .lineto(x,y); end;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X>=0) and (X <=512)) and ((Y>=0) and (Y <=350)) then
begin
label1.Caption :='X:'+inttostr(x)+' Y:'+inttostr(y);
if drawing then
begin
Y_Values[x]:=y;
Timer1.Enabled :=true;
end;
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
扫描屏幕,并得到整个屏幕的像素点,放在数组Y_Values[x]:=y
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:word;
begin
paintbox1.Refresh;
image1.Picture.Bitmap.LoadFromFile('1.bmp');//整个屏幕擦除
paintbox1.Canvas.MoveTo(Zero ,Y_Values[Zero] );
for i:=1 to Max_Y_Values.x do
begin
paintbox1.Canvas.LineTo(i,Y_Values[i]);
end;
end;
问题:鼠标移动快,捕捉到的点太少,而且鼠标按下移动过程只能看到很闪的波形,等鼠标停下来的时候,只剩下一个被擦除了的屏幕,没有波形。请大家提提建议
http://www.56.com/u65/v_NDUyNjk4OTQ.html这个是实现这个画图的例子
我对双缓冲不大熟悉,能不能给个例子。我邮箱[email protected]
基本的几点同这里的的几位大侠差不多:
1. 不要timer; //重点
2. doublebuffered; //不是关键
3. 使用memoryCanvas; // 重点;
4. 使用矢量数据; //关键
谢谢,我先查查资料吧
down时将位置保存到数组中,记录位置为0
move 时记录每个位置
up 时记录最后的位置从数组中读取内容绘制,可以直接写在onpaint 事件中,在move,up的时候刷新。用双缓冲实现图形的移动
http://blog.csdn.net/ZyxIp/archive/2007/03/30/1546379.aspx
"move 时记录每个位置":这个方法你能做到吗,当鼠标移动快,是不能捕捉到每个位置的吧。
procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drawing:=true;
if(drawing)then
begin
paintbox1.Canvas.Pen.Color:=clyellow;
if(x>=length(Y_Values))then
begin
paintbox1.Canvas.MoveTo(Max_Y_Values.x ,Max_Y_Values.y );
paintbox1.Canvas.LineTo(x,y);
setlength(Y_Values,x);
Max_Y_Values.x:=x;
Max_Y_Values.y:=y;
end
else
begin
paintbox1.Canvas .moveto(x,Y_Values[x]);
paintbox1.Canvas .lineto(x,y); end;
end;
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((X>=0) and (X <=512)) and ((Y>=0) and (Y <=350)) then
begin
label1.Caption :='X:'+inttostr(x)+' Y:'+inttostr(y);
if drawing then
begin
Y_Values[x]:=y;
Timer1.Enabled :=true;
end;
end;
end;
procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
扫描屏幕,并得到整个屏幕的像素点,放在数组Y_Values[x]:=y
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:word;
begin
paintbox1.Refresh;
image1.Picture.Bitmap.LoadFromFile('1.bmp');//整个屏幕擦除
paintbox1.Canvas.MoveTo(Zero ,Y_Values[Zero] );
for i:=1 to Max_Y_Values.x do
begin
paintbox1.Canvas.LineTo(i,Y_Values[i]);
end;
end;
问题:鼠标移动快,捕捉到的点太少,而且鼠标按下移动过程只能看到很闪的波形,等鼠标停下来的时候,只剩下一个被擦除了的屏幕,没有波形。请大家提提建议 重要:请结合下面的视频看我的问题! http://www.56.com/u65/v_NDUyNjk4OTQ.html这个是实现这个画图的视频
http://download.csdn.net/source/1547308
不过,你的例子还不能解决问题。当鼠标往回走的时候,X轴上就不只一个Y值了。(我是用来发送波形数据的,X轴上有且只有一个Y值).这样的软件有人实现过,就是下面的视频
http://www.56.com/u65/v_NDUyNjk4OTQ.html
我还有一个相同的帖子http://topic.csdn.net/u/20090802/23/9015c9bb-86cd-4394-b802-ec1d7c00b99e.html,差不多可以结帖子了:)
进http://topic.csdn.net/u/20090802/23/9015c9bb-86cd-4394-b802-ec1d7c00b99e.html这个帖子留个言,给你分,我要结帖了:)