文档章节

GdiPlus[35]: IGPGraphicsPath (二) 命中测试

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 274
阅读 6
收藏 0

IGPGraphicsPath.IsVisible        //指定点是否在路径内
IGPGraphicsPath.IsOutlineVisible //指定点是否在路径轮廓上

 
 
 
 
 

 

 

  

本例测试图:



本例代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormResize(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GdiPlus;

var
  Path1,Path2,Path3: IGPGraphicsPath;
  Pen: IGPPen;

procedure TForm1.FormCreate(Sender: TObject);
var
  R: TRect;
begin
  Pen := TGPPen.Create($FFFF0000, 3);

  Path1 := TGPGraphicsPath.Create;
  Path2 := TGPGraphicsPath.Create;
  Path3 := TGPGraphicsPath.Create;

  Path1.AddLine(0, 0, ClientWidth, ClientHeight);

  R := ClientRect;
  InflateRect(R, -ClientWidth div 3, -ClientHeight div 3);
  OffsetRect(R, -Trunc((R.Right-R.Left) * 0.6), -Trunc((R.Bottom-R.Top) * 0.6));
  Path2.AddRectangle(TGPRect.Create(R));

  OffsetRect(R, R.Right-R.Left, R.Bottom-R.Top);
  Path3.AddEllipse(TGPRect.Create(R));
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
begin
  Graphics := TGPGraphics.Create(Handle);
  with Graphics do
  begin
    DrawPath(Pen, Path1);
    DrawPath(Pen, Path2);
    DrawPath(Pen, Path3);
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Pt: TGPPoint;
  str: string;
begin
  Pt.Initialize(X, Y);
  str := '';
  if Path2.IsVisible(Pt) then str := '在矩形内';
  if Path3.IsVisible(Pt) then str := '在椭圆内';

  if Path1.IsOutlineVisible(Pt, Pen) then str := '在直线上';
  if Path2.IsOutlineVisible(Pt, Pen) then str := '在矩形的边线上';
  if Path3.IsOutlineVisible(Pt, Pen) then str := '在椭圆的圆周线上';

  if Text <> str then Text := str;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  OnCreate(Sender);
  Repaint;
end;

end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/17/1626373.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
65
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
85
0
MFC边框重绘

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
509
0
最频繁访问驻留缓存算法

在搜索系统中,如何缓存搜索最频繁的1000个搜索结果?自定制的精准短文本搜索服务项目代码 本文利用了ConcurrentHashMap和AtomicLong实现了线程安全且支持高并发的最频繁访问驻留缓存算法,除...

杨尚川
2016/07/18
631
0
强大的http加速器------varnish

varnish 简介 varnish是一款强大的http加速器,其设计初衷因为计算机越来越复杂,不像那个只有内存与硬盘的存储媒介的年代,如今的计算机系统除了内存外还有cpu的L1、L2、L3快取,因此当初的...

jungege1216
2014/05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
26分钟前
1
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
26分钟前
2
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
30分钟前
2
0
没错,老板让我写个 BUG!

前言 标题没有看错,真的是让我写个 bug! 刚接到这个需求时我内心没有丝毫波澜,甚至还有点激动。这可是我特长啊;终于可以光明正大的写 bug 了🙄。 先来看看具体是要干啥吧,其实主要就是...

crossoverJie
43分钟前
71
0
开源软件会被云杀死吗 ?

本文转载云头条,原作者:Michael Stiefel是Reliable Software公司的负责人,是一名软件架构和开发顾问。 文章要点 虽然开源开发不会消失,但商业开源厂商的未来不是很有希望。随着全面管理的...

linuxCool
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部