文档章节

再学 GDI+[59]: 路径 - TGPGraphicsPathIterator

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 430
阅读 6
收藏 0
通过路径的辅助类 TGPGraphicsPathIterator , 可以获得更多路径数据和控制能力.

本例效果图:



代码文件:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GDIPOBJ, GDIPAPI;

var
  path: TGPGraphicsPath;

procedure TForm1.FormCreate(Sender: TObject);
var
  pt1, pt2: TPoint;
begin
  Button1.Caption := '查看路径基本数据';
  Button2.Caption := '重绘路径中的子路径';

  pt1 := Point(30, 20);
  pt2 := Point(150, 120);

  {建立路径, 并添加四个子图形}
  path := TGPGraphicsPath.Create;
  path.StartFigure;
  path.AddRectangle(MakeRect(Rect(pt1, pt2)));
  path.CloseFigure;

  path.StartFigure;
  path.AddEllipse(MakeRect(Rect(pt1, pt2)));
  path.CloseFigure;

  path.StartFigure;
  path.AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y);
  path.CloseFigure;

  path.StartFigure;
  path.AddLine(pt1.X, pt2.Y, pt2.X, pt1.Y);
  path.CloseFigure;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  path.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclSilver, 2);
  g.DrawPath(p, path);
  p.Free;
  g.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  PathIterator: TGPGraphicsPathIterator;
  str: string;
begin
  PathIterator := TGPGraphicsPathIterator.Create(path);
  str := str + Format('路径中的总点数: %d', [PathIterator.GetCount]);
  str := str + Format(sLineBreak + '路径中的子路径数: %d', [PathIterator.GetSubpathCount]);
  str := str + Format(sLineBreak + '路径中是否包含曲线: %s', [BoolToStr(PathIterator.HasCurve, True)]);
  ShowMessage(str);
  PathIterator.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
  ColorArr: array[0..3] of TGPColor = (aclRed, aclGreen, aclBlue, aclYellow);
var
  PathIterator: TGPGraphicsPathIterator;
  PathSection: TGPGraphicsPath;
  bool: LongBool;
  g: TGPGraphics;
  p: TGPPen;
  i: Integer;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclRed, 2);
  PathIterator := TGPGraphicsPathIterator.Create(path);

  PathIterator.Rewind; {到路径起始点}
  for i := 0 to PathIterator.GetSubpathCount - 1 do
  begin
    PathSection := TGPGraphicsPath.Create;
    PathIterator.NextSubpath(PathSection, bool);
    p.SetColor(ColorArr[i]);
    g.DrawPath(p, PathSection);
    PathSection.Free;
  end;

  PathIterator.Free;
  p.Free;
  g.Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 198
  ClientWidth = 181
  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
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 24
    Top = 134
    Width = 137
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 24
    Top = 165
    Width = 137
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
end

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
实战开发:新手小白如何用C++制作经典网游DNF

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

stone15165
05/05
0
0
OSG3.2+Qt5.2.1+VS2012+OSGEarth 2.5编译问题记录

问题1:CMake Error at D:/Qt/Qt5.2.1/5.2.1/msvc201264opengl/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:16 (message): Failed to find "glu32" in "" with CMAKECXXLIBRARY_ARCHITECTURE ......

天蚕宝衣
2016/11/21
17
0
在C++Builder中使用GDI+的流程

在C++Builder中使用GDI+的流程: 1、 GDI+主要是通过gdiplus.dll进行调用,而BCB没有直接提供与gdiplus.dll对应的静态链接库,所以需要我们自己建立。如果在自己的计算机没有找到文件gdiplus...

hack_tian
04/11
0
0
C# chart控件绘制曲线

在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图、柱状图什么的了。 参考文章 1. 使用....

橘子红了呐
2017/11/07
0
0
MFC程序开机启动,图片无法加载,显示一片空白

开机时程序无法加载相应的图片,在应该有图片的地方显示为背景色。 程序使用GDI+加载图片,使用相对路径。当双击打开时程序显示正常,而当程序使用注册表添加到开机启动项时,程序开机时的主体部...

饕餮之怒
2013/05/18
607
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell-日志脚本小实验

1.查找日志2018-8-15,求得那一分钟访问量最大。 #/bin/bash#from cc#2018-8-15#2018-08-15.log 哪一分钟 访问量 最大for d in `ls /data/nginx/logs/`doif [ -a 2018-08-15...

chencheng-linux
昨天
0
0
Android中的设计模式之状态模式

参考 《设计模式:可复用面向对象软件的基础 》5.8 State 状态 对象行为型模式 《Android源码设计模式解析与实战》第7章 随遇而安--状态模式 意图 允许一个对象在其内部状态改变时改变它的行...

newtrek
昨天
0
0
xshell端 vim没有颜色

说明 使用xshell连接服务器的时候,使用vim打开文档没有颜色 解决方法: 1.在更目录home或者etc下找到vim的配置文件vimrc 2.vim打开它找个坑,添加下面这个东西 set t_Co=256 3.保存退出,就...

杉下
昨天
0
0
spring 资料

spring boot http://www.ityouknow.com/springboot/2016/01/06/spring-boot-quick-start.html

zaolonglei
昨天
2
0
TypeScript基础入门 - 函数 - 简介

转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.1.6 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接...

durban
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部