再学 GDI+[58]: 路径 - 保存与读取路径数据
再学 GDI+[58]: 路径 - 保存与读取路径数据
涂孟超 发表于3年前
再学 GDI+[58]: 路径 - 保存与读取路径数据
  • 发表于 3年前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

本例演示了把路径中的数据保存到一个文本文件, 然后再读出的过程.

本例效果图:



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

 
 
 
 
 

 

 

  
共有 人打赏支持
粉丝 13
博文 2004
码字总数 14107
×
涂孟超
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: