刚学delphi,想做一个雷达盘。用了两个image,一个做背景图,一个画扫描线,用timer触发事件更新
运行的时候图像闪的很厉害,doublebuffered也设为true了。请达人帮忙改一下是图像流畅一点,别闪了
procedure TForm1.OnDraw;
var
brect : TRect;
bitmap : TBitmap;
centerx,centery: Integer;
radium,pi : Double;
angleh:integer;
Toplacex,Toplacey:integer;
// x,y : Double;
begin
brect:=rect(0,0,Image1.Width,Image1.Height);
radium:=252.0;
pi:=3.14159265;
centerx:=round(Image1.Width/2);
centery:=round(Image1.Height/2);
ScanAngle:=ScanAngle mod (360 div ScanSpeed)+1;
bitmap:=TBitmap.Create;
with bitmap do
begin
Height :=Image1.Height;
Width := Image1.Width;
for angleh:=ScanSpeed*ScanAngle downto ScanSpeed*ScanAngle-ScanWide do
begin//画扫秒指针
Toplacex:=trunc(centerx+radium*sin(angleh/180*pi));
Toplacey:=trunc(centery-radium*cos(angleh/180*pi));
Canvas.Pen.Color:=rgb(colorvalue,colorvalue,colorvalue);
Canvas.Pen.Width:=4; //connectted with R
Canvas.MoveTo(centerx,centery);
Canvas.LineTo(Toplacex,Toplacey);
dec(colorvalue,200 div Scanwide);
end;
end;
Image2.Canvas.CopyRect(brect,bitmap.Canvas,brect);
bitmap.Free;end;
运行的时候图像闪的很厉害,doublebuffered也设为true了。请达人帮忙改一下是图像流畅一点,别闪了
procedure TForm1.OnDraw;
var
brect : TRect;
bitmap : TBitmap;
centerx,centery: Integer;
radium,pi : Double;
angleh:integer;
Toplacex,Toplacey:integer;
// x,y : Double;
begin
brect:=rect(0,0,Image1.Width,Image1.Height);
radium:=252.0;
pi:=3.14159265;
centerx:=round(Image1.Width/2);
centery:=round(Image1.Height/2);
ScanAngle:=ScanAngle mod (360 div ScanSpeed)+1;
bitmap:=TBitmap.Create;
with bitmap do
begin
Height :=Image1.Height;
Width := Image1.Width;
for angleh:=ScanSpeed*ScanAngle downto ScanSpeed*ScanAngle-ScanWide do
begin//画扫秒指针
Toplacex:=trunc(centerx+radium*sin(angleh/180*pi));
Toplacey:=trunc(centery-radium*cos(angleh/180*pi));
Canvas.Pen.Color:=rgb(colorvalue,colorvalue,colorvalue);
Canvas.Pen.Width:=4; //connectted with R
Canvas.MoveTo(centerx,centery);
Canvas.LineTo(Toplacex,Toplacey);
dec(colorvalue,200 div Scanwide);
end;
end;
Image2.Canvas.CopyRect(brect,bitmap.Canvas,brect);
bitmap.Free;end;
解决方案 »
- findwindow支持通配符吗
- 快捷键问题??
- 下面的sql语句怎么语法错误?怎么修改?
- 如何通过TControl对象遍历Form上的所有可见控件?
- 如何才能保证输入的是数字?
- 本人不想再做开发了,想出售delphi做的p2p代码,包括p2p文字聊天,p2p文件传送,和p2p语音聊天代码,有了这些代码,您就可以开发出和oicq
- 用Query组件操作Paradox表的问题
- 关于f1book的两个问题。
- 一个关于filter的问题,很奇怪
- 用ado的控件 能实现 Ttable那样的cacheupdate功能吗?
- 写脱Q软件要用什么
- Delphi2006 怎么安装在 .net framework 2.0下呢?
2、然后直接在PaintBox1.OnPaint事件中直接画扫描指针
3、然后在你的定时器触发事件中调用PaintBox1.Invalidate