DELPHI大挑站

LCR2002 2004-01-12 02:39:43
各位用DELPHI画各种图形,
直线,曲线,多边形等!
请指点明路!
...全文
26 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CPPBuilderExpert 2004-01-24
  • 打赏
  • 举报
回复
我觉得上面的说的都非常好。我补充一点,如果要开发一个简单的矢量绘图程序,那就要进行良好的设计模式构架。首先,将程序的对象分为绘制容器和绘制项目两类,绘制项目就是圆形、方形等这些个图形;容器就是画布本身。为了使开发的对象体系有很好的延伸性,应该首先定义两个根类,其一是容器对象的根类(TShapeContainer),提供最基本的容器服务函数,然后是图形物体(TShapeObject)的根类,这个根类具备所有形状物件的共性的成员,以及定义好它和容器之间的信息沟通方式,包括鼠标选中、绘制/重绘函数,位置、大小属性等等,TShapeObject还应该具备纯虚的绘制方法(DrawShape)成员函数以及得有一个TBitmap的成员对象,充当后台的绘制Buffer。而TShapeContainer则至少应该有一个TShapeObject的动态链表。TShapeContainer可以直接由TFrame派生,这样,会带来很多的方便。在编写代码的同时,可以在Frame上放置一个ScrollBox控件,然后在ScrollBox里面放一个PaintBox,这样,可以方便的进行很多要素的绘制。
自然,两个根类的成员很多都将是虚函数(Virtual),甚至于是纯虚函数(Abstract)。然后可以对TShapeContainer进行派生,派生出一个具体的画图板类;对TShapeObject进行派生,每一种形状都是一种后代类,覆盖实现DrawShape函数。
这种设计模式可以称之为“画图板模式”。
这样编写出来后,才是一个充分可扩展,灵活方便,内在构架良好的画图板模块。
SydPink 2004-01-23
  • 打赏
  • 举报
回复
各种图形元素写成CLASS,自己定义数据结构.这样才能做成矢量的.在PAINTBOX的ONPAINT里调用各个CLASS的PAINT方法.图形就不会不刷新而消失了.注意刷新的优化,图形而且是适量图太多的话.操作就慢了.建议用双缓冲.在内存里CREATE一个BMP.在这个内存BMP里做绘制操作.完成后一次性贴出来.PAINTBOX.DRAW(0,0,BMP);不会闪了.不要用IMAGE ,用PAINTBOX不会自己刷新.自己管理刷新才不会闪.
cst01 2004-01-18
  • 打赏
  • 举报
回复
一般的程序用Timage.Canvas
如果用了DelphiX
就用TDXDraw.Surface.Canvas
delphiplus 2004-01-17
  • 打赏
  • 举报
回复
建议用Image控件的TCanvas
along3000 2004-01-12
  • 打赏
  • 举报
回复
同意楼上。
亲密数 2004-01-12
  • 打赏
  • 举报
回复
各种图形都有
canvas.LineTo();
canvas.MoveTo();
canvas.Pie();
canvas.Pixels[x,y]等。重新刷新的话会消失的。你可以在timage上面画就不会消失了。

koy0755(koy)说的很有创意啊。
qhlkj 2004-01-12
  • 打赏
  • 举报
回复
去找个“涂鸦”程序啦
LCR2002 2004-01-12
  • 打赏
  • 举报
回复
记录光标的X,Y坐标?
怎么做比较好
koy0755 2004-01-12
  • 打赏
  • 举报
回复
好像在canvas上画图,窗口重绘时就会消失。建议直接用油性水笔在屏幕上画。
Dlwxn 2004-01-12
  • 打赏
  • 举报
回复
其实你随便找一本Delphi的书,上面都有介绍。
Dlwxn 2004-01-12
  • 打赏
  • 举报
回复
其实你随便找一本Delphi的书,上面都有介绍。
LCR2002 2004-01-12
  • 打赏
  • 举报
回复
是怎么用的了!
cll007 2004-01-12
  • 打赏
  • 举报
回复
canvas对象就是用来画图的

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧