从图形字段写入XML文件并读取
我需要一些帮助…从图形字段写入XML文件并读取,xml,delphi,dataset,Xml,Delphi,Dataset,我需要一些帮助…我在delphi 7中有一个带有图形字段的悖论表。有了这个:我可以从delphi的演示中创建一个类似biolife.XML的XML文件,但不需要图形字段。我添加了:ftGraphic:Result:=“bin.hex”SUBTYPE=“Graphic”在代码处,但什么都没有。。。XML文件结尾:Im=“/>在Im=”之后应该是图像代码,但它是空的,并且也没有关闭引号。对于我使用的图形字段: image1.Picture:= nil; panel1.PaintTo(image1.C
我在delphi 7中有一个带有图形字段的悖论表。有了这个:我可以从delphi的演示中创建一个类似biolife.XML的XML文件,但不需要图形字段。我添加了:
ftGraphic:Result:=“bin.hex”SUBTYPE=“Graphic”代码>
在代码处,但什么都没有。。。XML文件结尾:Im=“/>
在Im=”之后应该是图像代码,但它是空的,并且也没有关闭引号。对于我使用的图形字段:
image1.Picture:= nil;
panel1.PaintTo(image1.Canvas.Handle,0,0);
table1.edit;
table1.FieldByName('Im').Assign(image1.Picture.Bitmap);
table1.Post;
我想要的是从delphi创建一个类似“biolife.XML”的XML文件。有什么想法吗?你链接的文章写的是普通的XML文件,而不是像Biolife.XML这样的文件。图形不能存储在普通的XML文件中(它们必须在写入时进行编码,在读取时进行解码)。这篇文章(由Mike Skolnik撰写)没有使用图形字段,因为图形是二进制数据,不适合标准XML(并且不能通过存储在字符串中然后写入到TFileStream
来正确写入或读取)
Biolife.xml
不是图形文件。它是一个TClientDataSet
(简称CD),以XML格式存储。它有一个XML扩展名,但它远不像您链接的文章所创建的那样是一个简单的XML文件
(如果这是TLDR,只需跳到下面标有简短答案的段落即可)
是内存中的数据集,可以以二进制或XML格式持久化(保存)到文件中。换句话说,它是一种特殊类型的数据库。(有关更多信息,请参阅我回答中的下一步。)
Paradox对它可以存储和直接使用在TGraphicField
中的图形类型有限制,但我不记得它们是什么。(Paradox是通过Borland数据库引擎(BDE)访问的,十多年来它一直被弃用,自20世纪90年代中期Delphi 1以来我就没有使用过它。)您可以看到TGraphicField
可以存储在Delphi 7帮助文件中的TGraphicField.SetFieldType
方法的可能类型;它似乎接受的唯一实际图像文件是ftGraphic
,它是一个位图
Delphi7中的FishFacts
演示演示了如何使用Paradox图形,因为它使用Paradox数据库作为其存储机制IIRC。它位于Windows XP默认安装中的C:\Program Files\Borland\Delphi7\Demos\DB\FishFacts
文件夹中。在C:\Program Files\Borland Shared\Data
目录中还有一个BioLife.cds
(.cds
是二进制格式的TClientDataSet
存储默认扩展名)
换句话说,不要混淆Biolife.xml
文件具有.xml
扩展名这一事实。它是一种特殊格式的文件,除了通过TClientDataSet
访问外,几乎没有任何用处。(在记事本之类的文本编辑器中打开它;常规XML文件的结构非常清晰,可读性很强,而CDS XML文件则没有那么整洁
Cary Jensen在Borland开发者网站上发表了一些关于使用TClientDataSet
的文章,他用Delphi写了几本关于数据库编程的书和文章。如果你想使用TClientDataSet
比如Biolife.xml
,他写了一个优秀的系列文章,从这开始你就应该开始了
简短回答:如果要在Paradoxtgraphic字段
中存储图形,请以支持的格式将实际图形图像存储到该字段,或创建实际图形文件并使用LoadFromStream
或LoadFromFile
存储。但必须是实际图形文件(如位图);它不可能只是你想在野外投入的任何东西
基于您发布的代码可以工作的示例:
var
Bmp: TBitmap;
BmpField: TGraphicField;
begin
BmpField := table1.FieldByName('Im') as TGraphicField;
Bitmap := TBitmap.Create;
try
Bitmap.Width := Panel1.Width;
Bitmap.Height := Panel1.Height;
Panel1.PaintTo(Bitmap.Canvas.Handle, 0, 0);
table1.Edit;
BmpField.Assign(Bitmap);
table1.Post;
finally
Bitmap.Free;
end;
end;
如果您想使用TClientDataSet
如Biolife.xml
来存储您的数据,下面是如何开始的
您可以在Delphi 7的数据访问
选项卡的组件选项板上找到TClientDataSet
。它的作用与任何其他TDataSet
一样,这意味着您可以定义持久字段、插入/删除/编辑数据、筛选、创建索引等
使用它的基本方法很简单:只需将其放在表单上,并指定一个文件名。右键单击它,然后从弹出菜单中选择字段编辑器…
。右键单击出现的字段编辑器,然后选择新建字段
。定义要存储的字段及其类型,就像您在任何其他字段编辑器中一样ataset。重复此操作,直到您在CD中添加了所需的所有字段。然后关闭字段编辑器
,再次右键单击TClientDataSet
;将出现一个以前没有的创建数据集
选项。选择它,您将拥有新的数据集
现在,您可以像平常一样使用它:创建索引、插入、编辑和删除记录(行)、搜索(使用定位
)、筛选,等等。它可以连接(通过TDataSource
)与任何其他数据集一样,对任何数据感知控件(如TDBGrid
)执行。您还可以创建图形和备注字段,这在“正常”中极为困难XML;CD负责为您编码和解码所有内容。您链接的文章编写普通XML文件,而不是像Biolife.XML这样的文件。
图形不能存储在普通XML文件中(它们必须在写入时编码,在读取时解码)。帖子(由Mike Skolnik编写)不使用图形字段,因为图形是二进制数据,不适用于标准XML(并且不能通过存储在字符串中然后写入到TFileStream
来正确写入或读取)
Biolife.xml
不是图形文件。它是一个TClientDataSet
(简称CD),以xml格式存储。它有一个xml扩展名b