博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Direct2D (31) : 命中测试 - ID2D1Geometry.FillContainsPoint()、StrokeContainsPoint()
阅读量:7055 次
发布时间:2019-06-28

本文共 1262 字,大约阅读时间需要 4 分钟。

  hot3.png

uses Direct2D, D2D1;const  penWidth = 25;var  iGeometry: ID2D1EllipseGeometry;procedure TForm1.FormCreate(Sender: TObject);begin  D2DFactory.CreateEllipseGeometry(D2D1Ellipse(D2D1PointF(120, 90), 80, 50), iGeometry);end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);var  bFill, bStroke: LongBool;  intBool: Integer;  str: string;begin  iGeometry.FillContainsPoint(Point(X,Y), TD2DMatrix3x2F.Identity, 0, bFill);  iGeometry.StrokeContainsPoint(Point(X,Y), penWidth, nil, TD2DMatrix3x2F.Identity, 0, bStroke);  intBool := 0;  Inc(intBool, Integer(bFill) shl 1);  Inc(intBool, Integer(bStroke) shl 2);  case intBool of    0: str := '无命中';    2: str := '命中椭圆';    4: str := '命中椭圆边缘';    6: str := '同时命中椭圆及边缘';  end;  Caption := str;end;procedure TForm1.FormPaint(Sender: TObject);var  cvs: TDirect2DCanvas;begin  cvs := TDirect2DCanvas.Create(Canvas, ClientRect);  cvs.BeginDraw;  cvs.Brush.Color := clYellow;  cvs.FillGeometry(iGeometry);  cvs.Pen.Color := clRed;  cvs.Pen.Brush.Handle.SetOpacity(0.5);  cvs.Pen.Width := penWidth;  cvs.DrawGeometry(iGeometry);  cvs.Pen.Brush.Handle.SetOpacity(1);  cvs.Pen.Width := 1;  cvs.DrawGeometry(iGeometry);  cvs.EndDraw;  cvs.Free;end;

效果图:
26153345_nFBu.png

转载于:https://my.oschina.net/hermer/blog/319809

你可能感兴趣的文章
跨交换机实现VLAN
查看>>
mysql客户端的使用
查看>>
AIX创建删除page space
查看>>
scala 中的 日期格式化
查看>>
php面向对象
查看>>
Linux基础:日志管理
查看>>
Java中的多线程你只要看这一篇就够了
查看>>
第二章习题答案
查看>>
关于硬盘的一切!
查看>>
如何解决90%的报表设计难题?300张报表模板任君挑选
查看>>
EL函数库(由JSTL提供的)
查看>>
vagrant学习笔记 - provision
查看>>
PowerDesigner中pdm物理模型中 Name和Comment相互转换
查看>>
web.xml详解
查看>>
刘硕琛_下一代企业安全管理
查看>>
备战网络工程师认证考试:历年真题合集
查看>>
xargs
查看>>
RelativeLayout相对布局
查看>>
一个基于Python 装饰器的缓存库——wrapcache
查看>>
linux eclipse 离线安装svn插件subclipse
查看>>