文档章节

再学 GDI+[58]: 路径 - 保存与读取路径数据

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 486
阅读 10
收藏 0
本例演示了把路径中的数据保存到一个文本文件, 然后再读出的过程.

本例效果图:



代码文件:
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;

const
  FilePath = 'c:\temp\path.txt';
var
  path: TGPGraphicsPath;
  p: TGPPen;

procedure TForm1.FormCreate(Sender: TObject);
var
  pts: array[0..6] of TGPPoint;
  rect: TGPRect;
begin
  pts[0].X := 10;  pts[0].Y := 50;
  pts[1].X := 40;  pts[1].Y := 90;
  pts[2].X := 80;  pts[2].Y := 10;
  pts[3].X := 110;  pts[3].Y := 50;
  pts[4].X := 140;  pts[4].Y := 10;
  pts[5].X := 180; pts[5].Y := 90;
  pts[6].X := 210; pts[6].Y := 50;

  path := TGPGraphicsPath.Create;
  path.AddBeziers(PGPPoint(@pts), Length(pts));

  path.GetBounds(rect);
  path.AddEllipse(rect);

  p := TGPPen.Create(aclBlue, 2);

  Button1.Caption := '保存路径数据';
  Button2.Caption := '读取路径数据';
end;

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

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

procedure TForm1.Button1Click(Sender: TObject);
var
  points: array of TGPPoint;
  types: array of Byte;
  List: TStringList;
  i: Integer;
begin
  SetLength(points, path.GetPointCount);
  SetLength(types, path.GetPointCount);
  path.GetPathPoints(PGPPoint(points), Length(points));
  path.GetPathTypes(PByte(types), Length(types));

  List := TStringList.Create;
  for i := 0 to Length(points) - 1 do
    List.Add(Format('%d,%d,%d', [points[i].X, points[i].Y, types[i]]));

  List.SaveToFile(FilePath);
  List.Free;

  Text := FilePath;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  points: array of TGPPoint;
  types: array of Byte;
  List1,List2: TStringList;
  i: Integer;
begin
  List1 := TStringList.Create;
  List2 := TStringList.Create;

  if not FileExists(FilePath) then Exit;
  List1.LoadFromFile(FilePath);

  SetLength(points, List1.Count);
  SetLength(types, List1.Count);

  for i := 0 to List1.Count - 1 do
  begin
    if List1[i] = '' then Break;
    List2.CommaText := List1[i];
    points[i].X := StrToIntDef(List2[0], 0);
    points[i].Y := StrToIntDef(List2[1], 0);
    types[i] := StrToIntDef(List2[2], 0);
  end;

  path.Reset;
  path.Free;
  path := TGPGraphicsPath.Create(PGPPoint(points), PByte(types), List1.Count);

  p.SetColor(aclRed);
  Repaint;

  List1.Free;
  List2.Free;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 147
  ClientWidth = 224
  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 = 13
    Top = 114
    Width = 94
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 117
    Top = 114
    Width = 94
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
end

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Android 软件开发之数据的 新建 储存 读取 删除 详解(十四)

Android软件开发之数据的新建 储存 读取 删除 setContentView(R.layout.sharedpreferences);/拿到名称是SHARED_MAIN 的SharedPreferences对象/mShared = getSharedPreferences(SHAREDMAIN, C......

彭博
2012/03/09
85
0
Android 软件开发之数据的 新建 储存 读取 删除 详解(十四)

Android软件开发之数据的新建 储存 读取 删除 setContentView(R.layout.sharedpreferences);/拿到名称是SHARED_MAIN 的SharedPreferences对象/mShared = getSharedPreferences(SHAREDMAIN, C......

晨曦之光
2012/03/07
930
0
iOS沙盒以及基于文件的持久化

新建一个demo项目 在 - (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用如下代码 保存的结果是文件系统中会多出一个...

云飞扬v5
2016/09/21
3
0
spark 批量读取HDFS(hive分区)parquet文件

情况说明:数据以parquet文件形式保存在HDFS上,数据中的某一列包含了日期(例如:2017-12-12)属性,根据日期对数据分区存储,如下图所示: 项目需求: 在项目中想要读取某一个月的数据,肿...

dylanzr
2017/12/18
0
0
gdi+ 图片保存不成功

就像画图软件一样,加载进来一张图片,对图片进行修改编辑,然后把修改后的图片保存到原来的路径中,也就是以前的图片换成了修改后的图片,再打开这张图片就变成了修改后的了。因为这张图片正...

小李飞剪刀
2012/07/11
316
1

没有更多内容

加载失败,请刷新页面

加载更多

sed命令扩展使用操作

打印某行到某行之间的内容 假若文件test.txt的内容是: ertfff**[abcfd]123324444[rty]**fgfgf 怎么能截取 [abcfd]123324444[rty] 这一部分出来呢? 操作命令: 知道开始行和结...

野雪球
22分钟前
0
0
JVM内存笔记

Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原...

凌渡
28分钟前
0
0
284. Peeking Iterator

Description Tag: Design Difficulties: Medium Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the pee......

52iSilence7
31分钟前
0
0
防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
56分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部