关于先用pixels接着用lineto无法划线的问题(50分)

  • 主题发起人 主题发起人 dhjs
  • 开始时间 开始时间
D

dhjs

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟刚开始学delphi,有些问题请教,
procedure TForm1.Button1Click(Sender: TObject);
var
n,k,p,t:integer;
xt,yt:real;
const
pi:real=3.14159;
begin
n:=strtoint(edit1.Text);
k:=strtoint(edit2.Text);
p:=strtoint(edit3.Text);
with Image1 do
begin
canvas.pen.Color:=clred;
canvas.pen.Width:=3;
canvas.MoveTo(18,height-15);
canvas.LineTo(round((width-30)*(180-Trunc(140/n/k))/360),height-15);
for t:=0 to 10000*Trunc(140/n/k*round(width-30)/360) do
begin
xt:=t/10000;

yt:=p*10*(1-cos(pi*xt/trunc(140/n/k*360/round(width-30))))/2;
canvas.Pixels[round(t/10000+(width-30)*(180-Trunc(140/n/k))/360),height-15-round(yt)]:=clred;
end;
end;
Image1.canvas.pen.Width:=3;
Image1.canvas.MoveTo(trunc((width-30)/2),trunc(height-15-p*10));
Image1.canvas.LineTo(trunc((width-30)/2+round((180-Trunc(140/n/k))/360)),trunc(height-15-p*10)); [red]// 此处无法执行在Image1上,[/red]
end;
end.
 
刚才测试了你的代码,在d7,winXP下一起正常,没有任何问题
 
我就是在d7 winXP下编的
Image1.canvas.LineTo(trunc((width-30)/2+round((180-Trunc(140/n/k))/360)),trunc(height-15-p*10)); // 此处无法执行在Image1上
前两段正常显示,第三段直线无法显示,但是也不提示任何错误的
 
我也遇到过用LineTo无法划线的问题,用LineTo画线时,在画某些长度的线时会无法显示所画的线,这是Delphi的一个Bug,可以利用Polyline画线
 
经检查,问题代码中的round((180-Trunc(140/n/k))/360))部分总是等于0,因此LintTo与MoveTo的参数是一样的,画出来只有一个点!

此外,最后三行画线的代码处在 with Image1 do 之外, 代码中引用的Width, Height是Form的宽度和高度,假如Image1比Form小很多,那么,最后画出来的那个点就在Image1可见范围之外了,这个点也就看不到了!
 
to: tonmy, thanks,明白了
to: xinyue_liang, 我试试polyline
 

Similar threads

I
回复
0
查看
780
import
I
I
回复
0
查看
756
import
I
I
回复
0
查看
2K
import
I
I
回复
0
查看
3K
import
I
后退
顶部