自定义文件格式保存
我现在自已定义了一个文件格式,但是不知道怎么保存,一直出错
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
FType = record
x : integer;
y : integer;
end;
T1 = record
c : TColor;
pt : TList;
end;
pLine = ^FType;
pT1 = ^T1;
TForm1 = class(TForm)
Button1: TButton;
d1: TColorDialog;
Panel1: TPanel;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Panel1Click(Sender: TObject);
private
{ Private declarations }
FList: TList;
CList: TList;
FStartPoint: TPoint;
public
{ Public declarations }
end;
var
Form1: TForm1;
xWrite,yWrite : integer;
oCount:integer;
implementation
{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p : pLine;
begin
if ssLeft in shift then
begin
Form1.Canvas.Pen.Width := 1;
Form1.Canvas.Pen.Color := d1.Color;
Form1.Canvas.Pen.Mode := pmcopy;
Form1.Canvas.moveto(xWrite,yWrite);
Form1.Canvas.lineto(x,y);
New(p);
p.x := x;
p.y := y;
FList.Add(p);
Dispose(p);
end;
xWrite := x;
yWrite := y;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
lFileStream: TFileStream;
i,j : Integer;
lLineRec : pLine;
c:pT1;
begin
panel1.Color := d1.Color;
oCount := 0;
FList := TList.Create;
CList := TList.Create;
if FileExists('d:\Default.dat') then
begin
lFileStream := TFileStream.Create('d:\Default.dat', fmOpenRead);
for i := 0 to (lFileStream.Size div SizeOf(T1)) -1 do
begin
new(c);
lFileStream.Read(c^,SizeOf(T1));
CList.Add(c);
Dispose(c);
end;
lFileStream.Free;
Invalidate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: Integer;
c : pT1;
lFileStream: TFileStream;
begin
lFileStream := TFileStream.Create('d:\Default.dat', fmCreate);
pT1(CList[oCount - 1]).pt := FList;
for i := 0 to CList.Count - 1 do
begin
c := pT1(CList[i]);
lFileStream.Write(c^,SizeOf(T1));
end;
lFileStream.Free;
//FList.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
i,j: Integer;
tmpList:TList;
begin
//Canvas.Pen.Color := clRed;
Canvas.Pen.Width := 1;
tmpList := TList.Create;
for i := 0 to CList.Count - 1 do
begin
tmpList.Clear;
Canvas.Pen.Color := pT1(CList[i]).c;
tmpList := pT1(CList[i]).pt;
for j := 1 to tmpList.Count - 1 do
begin
Canvas.MoveTo(PLine(tmpList[i-1]).X, PLine(tmpList[i-1]).Y);
Canvas.LineTo(PLine(tmpList[i]).X, PLine(tmpList[i]).Y);
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FList.Free;
end;
procedure TForm1.Panel1Click(Sender: TObject);
var
p : pT1;
begin
if d1.Execute then
begin
new(p);
p.c := d1.Color;
p.pt := TList.Create;
if oCount > 0 then
begin
pT1(CList[oCount - 1]).pt := FList;
end;
CList.Add(p);
oCount := oCount + 1;
Dispose(p);
panel1.Color := d1.Color;
end;
end;
end.
两个记录类型,T1中的pt是存指向FType中的指针