不透明窗体中画线、弧的问题,在线等。

7899 2004-08-06 08:45:33
在不透明窗体中画矩形、多边形和圆都行,但如果只画一条直线或一段圆弧却不行
Canvas.Pen.Width:=2; //根本没用
BeginPath(Canvas.Handle);
MoveToEx(Canvas.Handle,x1,y1,nil);
LineTo(Canvas.Handle,x2,y2);
CloseFigure(Canvas.Handle);
EndPath(Canvas.Handle);
LineRgn1:=PathToRegion(Canvas.Handle); //画出的直线无效

BeginPath(Canvas.Handle);
Canvas.Arc(x0-r,y0-r,x0+r,y0+r,x0+r,y0,x0-r,y0);
CloseFigure(Canvas.Handle);
EndPath(Canvas.Handle);
LineRgn1:=PathToRegion(Canvas.Handle); //画出的圆弧无效

画直线如果以直线为中心构造一矩形,且矩形四点座标必须为int,且矩形高度不能太大(看上去不像直线了)也不能小于1,这算法岂不是很麻烦?圆弧又怎么办?
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
同样,要画个弧线区域,必须使弧线变成一个弧带,哪怕是很窄,比如宽度为1,当然,由于98不记录Arc的路径,所以只能用PolyBezier.
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
你可以画一个很窄的线框比如:
BeginPath(Canvas.Handle);
MoveToEx(Canvas.Handle,x1,y1,nil);
LineTo(Canvas.Handle,x2,y2);
LineTo(Canvas.Handle,x2-1,y2-1);
LineTo(Canvas.Handle,x1-1,y1-1);
LineTo(Canvas.Handle,x1,y1);
EndPath(Canvas.Handle);
LineRgn1:=PathToRegion(Canvas.Handle);
7899 2004-08-06
  • 打赏
  • 举报
回复
godnoloveihavelove(快感):我知道路径要可以闭和的,我也想过以直线为中心构造一矩形那就是闭合的了,那样就太复杂了,“你可以换个方法来画,或者去掉和PathToRegion有关的东西应就可以画出来了”要用什么来画?“去掉和PathToRegion有关的东西”又要怎样得到直线所包含的区域?
wizardqi(男巫) :这些我也知道,问题是我的直线和弧不是闭合的,怎样才能让它闭合?
像画一条从(0,0)到(100,200)的直线(当然直线坐标也是任意的)
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
说错了,是98不支持Arc 和 ArcTo 的Path 的。
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
98中是不支持Path的,不过可以用PolyBezier代替,很简单的。
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
你看看MSDN说的:
When an application calls BeginPath for a device context, any previous paths are discarded from that device context.

Windows NT: The following drawing functions define points in a path:

AngleArc LineTo Polyline
Arc MoveToEx PolylineTo
ArcTo Pie PolyPolygon
Chord PolyBezier PolyPolyline
CloseFigure PolyBezierTo Rectangle
Ellipse PolyDraw RoundRect
ExtTextOut Polygon TextOut


Windows 95 and Windows 98: When constructing a path, only the CloseFigure, ExtTextOut, LineTo, MoveToEx, PolyBezier, PolyBezierTo, Polygon, Polyline, PolylineTo, PolyPolygon, PolyPolyline, and TextOut functions are recorded
godnoloveihavelove 2004-08-06
  • 打赏
  • 举报
回复
PathToRegion
是这样的函数,是可以将路径转换为RECT的函数,前提是要路径可以闭和,否则无效,你可以换个方法来画,或者去掉和PathToRegion有关的东西应就可以画出来了
7899 2004-08-06
  • 打赏
  • 举报
回复
是98,楼上的有什么方法?
wizardqi 2004-08-06
  • 打赏
  • 举报
回复
你肯定用的是98了?

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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