文档章节

再学 GDI+[51]: 路径 - IsVisible、IsOutlineVisible

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 302
阅读 4
收藏 0
点赞 0
评论 0
本例效果图:



代码文件:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var
  path1,path2,path3: TGPGraphicsPath;
  p: TGPPen;

procedure TForm1.FormCreate(Sender: TObject);
var
  r: TRect;
begin
  path1 := TGPGraphicsPath.Create;
  path2 := TGPGraphicsPath.Create;
  path3 := TGPGraphicsPath.Create;
  p := TGPPen.Create(aclRed, 3);

  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(MakeRect(r));

  OffsetRect(r, r.Right-r.Left, r.Bottom-r.Top);
  path3.AddEllipse(MakeRect(r));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  path1.Free;
  path2.Free;
  path3.Free;
  p.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  g.DrawPath(p, path1);
  g.DrawPath(p, path2);
  g.DrawPath(p, path3);
  g.Free;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Text := '';
//  if path1.IsVisible(MakePoint(X,Y)) then Text := '在 path1 内';
  if path2.IsVisible(MakePoint(X,Y)) then Text := '在矩形内';
  if path3.IsVisible(MakePoint(X,Y)) then Text := '在椭圆内';

  if path1.IsOutlineVisible(X, Y, p) then Text := '在直线上';
  if path2.IsOutlineVisible(X, Y, p) then Text := '在矩形的边线上';
  if path3.IsOutlineVisible(X, Y, p) then Text := '在椭圆的圆周线上';
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 206
  ClientWidth = 339
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnMouseMove = FormMouseMove
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
end

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
Windows Phone 7 - 菜单栏 Application Bar

一.Application Bar Windows Phone中的菜单栏最多可以显示4个图标按钮。这些图标会自动地被从左向右添加到菜单栏中。如果还有额外的选项可以通过菜单项来添加,这些菜单项默认是 不显示的。...

虫虫 ⋅ 2012/02/21 ⋅ 0

Windows Phone 开发 教你隐藏系统托盘

可以在页面初始化时,进行控制 使用如下代码 隐藏系统托盘: Microsoft.Phone.Shell.SystemTray.IsVisible = true; 显示托盘代码: Microsoft.Phone.Shell.SystemTray.IsVisible = false; 代...

junwong ⋅ 2012/06/14 ⋅ 4

使用WM_QUIT终止线程

下面是一个线程1的函数: ThreadFun1 { ....// A while (::GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); Dispatc......

技术小甜 ⋅ 2017/11/07 ⋅ 0

VC实现多格式图像的转换

色彩鲜艳漂亮的高品质图像,一个个形象生动的Windows图标,高速运动、活灵活现的三维动画,这些无一不显示出程序设计者的艺术才华。在程序设计中,图像处理已经成为每个程序员的必修课。 在V...

余二五 ⋅ 2017/11/06 ⋅ 0

C#操作合并多个Word文档

首先将word文档路径保存在List中,新建一个word文档对象并循环List打开对应的word,之后拷贝文档,在新文档中粘贴并且粘贴前先插入换行符。最后保存新文档,并销毁进程。 protected void But...

老朱教授 ⋅ 2017/10/08 ⋅ 0

仿今日头条N个fragment懒加载

啊哈,我又双叒叕推新一篇文章了,fragment懒加载实现虽然是个小模块,但做过的人都有体会,通常并不会轻易就成功了的,让你辗转反侧,彻夜难眠,绵绵无绝期。我就按照今日头条的样式做了一个...

翻滚吧李博 ⋅ 2017/12/01 ⋅ 0

linq学习笔记(3):Where

前面学习了Linq的DataContext的基础知识,你可能会觉得手工定义和数据库中表对应的实体类很麻烦,不用担心,VS2008提供了自动生成实体类以及关系的工具。下面我们利用VS2008来创建DataConte...

长平狐 ⋅ 2013/06/17 ⋅ 0

实战开发:新手小白如何用C++制作经典网游DNF

十年前,那时候的网吧还不叫网咖,那时候没有王者荣耀也没有英雄联盟,那时候梦幻西游刚推出珍宝阁系统,那时候巫妖王的灵魂还封闭在冰封王座。 寻仙、穿越火线、征途、天龙八部……同时在线...

stone15165 ⋅ 05/05 ⋅ 0

滚动到顶部-jquery.scrolltotop.js

使用教程: 直接粘贴下面的代码, 作为一个引入 配置参数: 初始化插件:

前端届的科比 ⋅ 2014/05/25 ⋅ 0

Andriod开发技巧——Fragment的懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activ...

hejunbinlan ⋅ 2016/06/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

笔试题之Java基础部分【简】【一】

基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他 1.length、length()和size() length针对...

anlve ⋅ 15分钟前 ⋅ 1

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 39分钟前 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 44分钟前 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 8

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部