请高手解答怪问题(100分)

云影

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个画多变型的过程:procedure drawstar(r1,r2,n:integer ;cpoint:tpoint;canvas:tcanvas);
var
i:integer;
corner:real;
pt:array of tpoint;
begin
corner:=6.28/n;
setlength(pt,2*n+1);
for i:=0 to n do
begin
pt[2*i]:=point(cpoint.X+round(r1*sin(I*(corner))),cpoint.Y+round(r1*cos(I*corner)));
pt[2*i+1]:=point(cpoint.X+round(r2*sin((I+0.5)*corner)),cpoint.Y+round(r2*cos((I+0.5)*corner)));
end;

canvas.Polyline(pt);
end;但调试时总是出错;有时出现堆栈出错,请高手帮忙,不胜感激;
My E-mail : fromicbc@sina.com
 
var
i:integer;
corner:real;
pt:array of tpoint;
begin
corner:=6.28/n;
setlength(pt,2*n+1);//////////setlength(pt,2*n);//////////
for i:=0 to n do /////////////for i:=0 to n-1 do
begin
pt[2*i]:=point(cpoint.X+round(r1*sin(I*(corner))),cpoint.Y+round(r1*cos(I*corner)));
pt[2*i+1]:=point(cpoint.X+round(r2*sin((I+0.5)*corner)),cpoint.Y+round(r2*cos((I+0.5)*corner)));
end;

canvas.Polyline(pt);
end;
改了以后OK,你的pt越界了
 
我可能没说清楚;上面的方法不行,我的代码调试过多数情况下没问题;
只是我把它封装在一个类中了;当他的属性shape:=star时,调用上面我的
画图程序时,有时出错,莫名其妙。
 
不管怎么说你以前的pt出问题了,现在改过以后可以正确运行的,
对于你把她分装到一个类中也应该是没有问题的,而你说属性shape这就不清楚了,
我也不知道你的类是怎么写的,
 
type
Tshapes=class
style:tshaperc;
procedure draw(pic:tcanvas);
end;
type
shapeclass=(rect......star);
tshaperc=packed record
Bcolor:Tcolor;
Pcolor:Tcolor;
Pwidth:integer;
Pstyle:tpenstyle;
Bstyle:tbrushstyle;
case shape:shapeclass of
..................

star:(r1,r2,n:integer ;cpoint:tpoint);

end;
当一个记录记载一个星形画图参数时,
他的shape:=star;
交给Tshapes.style
在调用draw,
他根据shape决定画什麽。
往往这是出错,是不是packed record 用错。

 
还是不懂你什么地方错了,我刚才给你发email了,你可以把代码回给我看看
(如果不太大的话)
 
var
i:integer;
corner:real;
pt:array of tpoint;
begin
corner:=6.28/n;
setlength(pt,2*(n+1)); //注意这里!
for i:=0 to n do
begin
pt[2*i]:=point(cpoint.X+round(r1*sin(I*(corner))),cpoint.Y+round(r1*cos(I*corner)));
pt[2*i+1]:=point(cpoint.X+round(r2*sin((I+0.5)*corner)),cpoint.Y+round(r2*cos((I+0.5)*corner)));
end;
canvas.Polyline(pt);
end;

给分!
 
我给的代码已经没有保留了.
 
顶部