关于Canvas画布的问题.

weixiaohua 2009-08-15 08:39:31
Canvas能不能只在指定范围内使用Pen或者Brush呢.
比方我指定一个Rect(50, 50, 100, 100),当我用Pen画线时如果X或者Y超过这个矩形时自动截取掉超过的坐标.
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2009-08-15
  • 打赏
  • 举报
回复
除上面说的if判断之外

还可以用ClipCursor来锁定范围
husion01 2009-08-15
  • 打赏
  • 举报
回复
可以的,近来我也在做画图的,你可以有MouseMove中用IF判断是否超过限制。
Seamour 2009-08-15
  • 打赏
  • 举报
回复
找一个从TWinControl继承下来的带Canvas的控件SetWindowRgn就可以了
bdmh 2009-08-15
  • 打赏
  • 举报
回复
在Mousemove中判断x,y是否超出区域
weixiaohua 2009-08-15
  • 打赏
  • 举报
回复
我也这么做的感觉麻烦了点.想看看有没有简单点的办法.
用TextRect可以避免超出范围,画线为什么还得自己判断啊!!!
sanguomi 2009-08-15
  • 打赏
  • 举报
回复
想到有办法有可以做到楼主那样的,用API钩,钩住API LINETO等,在里边做判断,如果超过范围就是你定的范围,不过完全是没必要
grjs2004 2009-08-15
  • 打赏
  • 举报
回复
是啊!
你做个if判断,把Pen的起始坐标和重点坐标设置成参数,在Rect范围内的就直接传Pen画的线的两点坐标,否则,取Rect的坐标!
当然要判断画线方向,取出线的倾斜角来定线的方向!

这个计算有点麻烦,不过搞清楚了所有要素,是完全可以做到的!
sanguomi 2009-08-15
  • 打赏
  • 举报
回复
这个要你自己去做判断的
luojun198305 2009-08-15
  • 打赏
  • 举报
回复
把要画的线的2点设置成参数,超过指定范围就不显示就可以了。
lhy 2009-08-15
  • 打赏
  • 举报
回复
画在另一个Canvas上,然后CopyRect
阿呆_ 2009-08-15
  • 打赏
  • 举报
回复
很简单啊.

....
index := SaveDC(Canvas.Handle);
IntersectClipRect(Canvas.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom); // 后续画图操作只能画在Rect内, 超出部分会被自动截掉
...
RestoreDC(Canvas.Handle, index); // 后续画图可以画到rect外面了

1,183

社区成员

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

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