文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:33
字数 302
阅读 4
收藏 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

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/06/19/1226043.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
DNN Navisuite菜单模块原始XML文件的格式

DNN 比较好用的一个菜单模块式Navsuite模块,这个模块因为使用XML+XSL的技术手段,可以灵活的生成各种各样的菜单样式。 你可以通过修改style目录下的xsl文件来创建自己的菜单样式,但有一个问...

m2land
2009/04/12
0
0
使用WM_QUIT终止线程

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

技术小甜
2017/11/07
0
0
VC实现多格式图像的转换

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

余二五
2017/11/06
0
0
Windows Phone 7 - 菜单栏 Application Bar

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

虫虫
2012/02/21
665
0
Windows Phone 开发 教你隐藏系统托盘

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

junwong
2012/06/14
534
4

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
1
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
2
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
1
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部