文档章节

再学 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
深圳
程序员
盼望着,盼望着,快来吧。。我的新书。。。。

昨天刚刚发工资,又正好收到邮件说是那本《 庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术 》已经到货了,赶紧上china-pub下订单购买了,同时还买了另一本《ASP.NET 3.5从入门到精通:基于...

niunan
2009/04/15
0
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx访问日志-日志切割-静态文件不记录日志和过期时间

nginx访问日志: vim /usr/local/nginx/conf/nginx.conf #搜索log_format 该字段定义日志格式,默认如下: #combined_realip日志格式的名字,可随意定义; 定义访问日志: 需在虚拟主机配置文...

ZHENG-JY
6分钟前
0
0
180.mariadb 主从复制

参考:https://blog.csdn.net/chengxuzaza/article/details/62042920 睡觉睡觉,明天写 1.效果 当主库中数据有变化的时候,从库就自动同步 2. 环境要求 至少两台 linux服务器 (教程:https...

Lucky_Me
16分钟前
0
0
erlng file id3v1 id3v1.1

%% ---%% Excerpted from "Programming Erlang",%% published by The Pragmatic Bookshelf.%% Copyrights apply to this code. It may not be used to create training material, %% ......

xueyuse0012
17分钟前
1
0
RabbitMq的安装

环境Centos6.5 32位 JDK 1.7.8 Jdk的卸载 rpm -qa|grep jdk yum –y remove 上边的安装包 JDK的安装 Rpm –ivh jdk安装包 配置环境变量 export JAVA_BIN=/usr/java/jdk1.7.0_80/bin export J......

DemonsI
21分钟前
0
0
http和https协议

HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,中文含义为“超文本传输协议在安全加密字层”,简单来说就是加密数据传输,通俗的说就是安全连接。 HTTPS安全超文本传输...

寰宇01
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部