| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:delphi画图中出现多变形 画不出来polygon 感觉程序都没有错误呀
只看楼主 加入收藏
ningyanhong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-6
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:2 
delphi画图中出现多变形 画不出来polygon 感觉程序都没有错误呀
AssignFile(F,'e:\地图数据/绿地.MIF');
  Reset(F); //只读打开
  Readln(F,penwidth,pentype,pencolor);
  Readln(F,siBrushPattern,lForeColor,lBackColor);
  R:=round(pencolor/65536);
G:=round((pencolor-R*65536)/256);
B:=pencolor-R*65536-G*256;

  R1:=round(lForeColor/65536);
G1:=round((lForeColor-R1*65536)/256);
B1:=lForeColor-R1*65536-G1*256;




 while not Eof(F) do
 begin
  readln(F);
  readln(F,points);
  readln(F,xArray[0],yArray[0]);
  x:=round((xArray[0]-mapleftx)*1000000*setcshx);
  y:=round((yArray[0]-maprighty)*1000000*setcshy);

  image1.Canvas.MoveTo(x,y);
  { readln(F,xArray[0],yArray[0]);
  x:=round((xArray[0]-mapleftx)*1000000*setcshx);
  y:=round((yArray[0]-maprighty)*1000000*setcshy);


  xArray[0]:=116.88365;
  yArray[0]:=36.64903;


  x:=round((xArray[0]-mapleftx)*1000000*setcshx);
  y:=round((yArray[0]-maprighty)*1000000*setcshy);
  image1.Canvas.Ellipse((x-100),(y-100),(x+100),(y+100));
  }


 for i:=1 to points-1 do
  begin
  readln(F,xArray[i],yArray[i]);
  x:=round((xArray[i]-mapleftx)*1000000*setcshx);
  y:=round((yArray[i]-maprighty)*1000000*setcshy);

  pointone[i].X:=x;
  pointone[i].Y:=y;
  // MyPoints[0]:=Point(200,100);


  // image1.Canvas.LineTo(x,y);


  end;
  // pointone[0]:=pointone[points-1];
  image1.Canvas.Pen.Color:=RGB(R,G,B);
  image1.Canvas.Pen.Width:=penwidth;
  image1.Canvas.Brush.Color:= RGB(R1,G1,B1);
  image1.Canvas.Polygon(pointone);
  readln(F);
  readln(F);
  readln(F);
  { for i:=0 to points-1 do
  begin
  // pointone[i]:=point(x,y);
  pointone[i].X:=0;
  pointone[i].Y:=0;
  end; }
end;

  CloseFile(F);
 
搜索更多相关主题的帖子: 地图数据 points begin while 
2011-07-18 10:30
ningyanhong
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2011-7-6
收藏
得分:0 
在线等待
2011-07-18 10:30
yuutian
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:137
专家分:686
注 册:2010-10-27
收藏
得分:10 
这个你可以参考一下:
程序代码:
在OnPaint事件中增加如下代码: 

procedureTSDIAppForm.FormPaint(Sender:TObject);
begin
canvas.FillRect(rect);{清空桌面画布}
withSDIappformdo
posx:=clientwidthdiv2;
posy:=clientheightdiv2;{确定客户区中心点}
casedetectIof
1:
begin
setpenstate;
canvas.Ellipse(posx-50,posy-50,posx+50,posy+50);
//penwidth:=oldwidth;
end;{在客户区中心点画圆}
2:
begin
setpenstate;
canvas.MoveTo(posx-60,posy-60);
canvas.LineTo(posx+60,posy+60);
//penwidth:=oldwidth;
end;{在客户区画直线}

3:
begin
fposx:=trunc(50*cos(pi/6));
fposy:=trunc(50*sin(pi/6));
setpenstate;
Canvas.Polygon([Point(posx-fposy,posy-fposx),
Point(posx+fposy,posy-fposx),
Point(posx+50,posy),Point(posx+fposy,posy+fposx),
point(posx-fposy,posy+fposx),point(posx-50,posy)]);
//penwidth:=oldwidth;
end;{在客户区中心点画多边形}
4:
begin
setpenstate;
canvas.RoundRect(posx-100,posy-50,posx+100,posy+50,
20,20);
end;{在客户区中心点画带圆角的矩形}

5:
begin
setpenstate;
sdiappform.Canvas.Brush.Color:=clred;
canvas.Rectangle(posx-100,posy-50,posx+100,posy+50);
sdiappform.Canvas.Brush.Color:=bcolor;
end{在客户区中心点用红色刷子画矩形}
else
begin
canvas.Font:=formfont;
canvas.TextOut(30,posy,str);
end;
end;{写字}
end;
上面程序中出现的变量在事件OnCreate中初始化。
procedureTSDIAppForm.FormCreate(Sender:TObject);
begin
str:=;{要写在画布上的字符串}
formfont:=canvas.font;{字体和大小}
detectI:=0;{确定画布上出现何种图形的参数}
rect:=sdiappform.ClientRect;{客户区矩形}
oldwidth:=sdiappform.Canvas.Pen.Width;{最初画笔宽度}
penwidth:=oldwidth;{画笔宽度}
penstyle:=sdiappform.Canvas.Pen.Style;{画笔类型}
pencolor:=sdiappform.Canvas.Pen.Color;{画笔颜色}
bcolor:=sdiappform.Canvas.Brush.Color;{画刷颜色}
end;

  为了减少代码,定义了一个Public过程,设定画笔。代码如下:
procedureTSDIAppForm.setpenstate;
begin
withsdiappform.Canvas.Pendo
begin
color:=pencolor;
style:=penstyle;
width:=penwidth;
end;
end;

  响应每一个菜单项OnClick事件本程序设计得非常简单,如果有兴趣,读者也可以加上一些代码,完成许多复杂的工作。
procedureTSDIAppForm.LineColor1Click(Sender:TObject);
begin
ifcolordialog1.Executethen
begin
pencolor:=colordialog1.Color;
SdiAppForm.Canvas.Pen.Style:=psInsideFrame;
ifpenwidth$#@60;1then
SdiAppForm.Canvas.Pen.Width:=3;
SdiAppForm.Canvas.Pen.Color:=pencolor;
invalidate;
end;
end;{完成画笔颜色设定}
//{完成画笔笔形设定}
procedureTSDIAppForm.Solid1Click(Sender:TObject);
begin
penStyle:=pssolid;
invalidate;
end;


procedureTSDIAppForm.Dot1Click(Sender:TObject);
begin
PenStyle:=psdot;
invalidate;
end;

procedureTSDIAppForm.Dash1Click(Sender:TObject);
begin
penStyle:=psdash;
invalidate;
end;

procedureTSDIAppForm.DashDot1Click(Sender:TObject);
begin
PenStyle:=psdashdot;
invalidate;
end;

procedureTSDIAppForm.DashDotDot1Click(Sender:TObject);
begin
penStyle:=psdashdotdot;
invalidate;
end;
//////////////////////////////////
procedureTSDIAppForm.RoundRect1Click(Sender:TObject);
begin
detectI:=4;
invalidate;
end;

procedureTSDIAppForm.Rectangle1Click(Sender:TObject);
begin
detectI:=5;
invalidate;
end;

procedureTSDIAppForm.Helloworld1Click(Sender:TObject);
begin
detectI:=0;
str:=helloworld!!;
Invalidate;

end;

procedureTSDIAppForm.Imateacher1Click(Sender:TObject);
begin
detectI:=0;
str:=Iamateacher!!;
Invalidate;
end;

procedureTSDIAppForm.Fonts1Click(Sender:TObject);
begin
iffontdialog1.Executethen
begin
detectI:=0;
formfont:=fontdialog1.font;
invalidate;
end;
end;{设定字体和大小}

  编译并运行,可以看到画图的效果。 

2011-07-20 21:45
快速回复:delphi画图中出现多变形 画不出来polygon 感觉程序都没有错误呀
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027472 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved