您链接的文章编写纯 XML 文件,而不是Biolife.xml
. 图形不能存储在纯 XML 文件中(它们必须在写入时进行编码,在读取时进行解码)。该帖子(由 Mike Skolnik 撰写)不使用图形字段,因为图形是二进制数据,不适合标准 XML(并且无法通过存储在字符串中然后写入到TFileStream
.) 中正确写入或读取。)
Biolife.xml
不是图形文件。它是一个TClientDataSet
(简称 CDS),以 XML 格式存储。它有一个 XML 扩展名,但它远不是一个简单的 XML 文件,就像您链接的文章正在创建的那样。
(如果这是 TLDR,只需跳到下面标记为Short Answer的段落。)
TClientDataSet
是一个内存数据集,可以以二进制或 XML 格式保存(保存)到文件中。换句话说,它是一种特殊类型的数据库。(有关更多信息,请参阅我的答案。)
Paradox 对它可以存储和直接在 a 中使用的图形类型有限制TGraphicField
,但我不记得它们是什么。(Paradox 是通过 Borland 数据库引擎或 BDE 访问的,它已经被弃用了十多年,自 1990 年代中期的 Delphi 1 以来我就没有使用过它。)你可以看到可能的TGraphicField
类型存储在该TGraphicField.SetFieldType
方法的 Delphi 7 帮助文件中;它似乎接受的唯一实际图像文件是ftGraphic
,它是一个位图。
Delphi 7 中的FishFacts
演示展示了如何使用 Paradox 图形,因为它使用 Paradox 数据库作为其存储机制 IIRC。它位于C:\Program Files\Borland\Delphi7\Demos\DB\FishFacts
Windows XP 上默认安装的文件夹中。目录中还有一个BioLife.cds
(.cds
是二进制格式TClientDataSet
存储默认扩展名)C:\Program Files\Borland Shared\Data
。
换句话说,不要混淆Biolife.xml
文件具有.XML
欺骗您的扩展名这一事实。这是一个特殊格式的文件,除了通过TClientDataSet
. (在记事本之类的文本编辑器中打开它;常规的 XML 文件结构清晰易读,而 CDS XML 文件则没有那么整洁。
Borland Developer 网站上有一些关于TClientDataSet
Cary Jensen 使用的文章,他写了几本关于 Delphi 数据库编程的书籍和文章。他写了一个很棒的系列A ClientDataSet in Every Database Application
文章,如果你想使用TClientDataSet
like的话,应该可以帮助你入门Biolife.xml
。
简短回答:如果您想将图形存储在 ParadoxTGraphicField
中,请将受支持格式的实际图形图像存储到该字段,或者创建一个实际图形文件并使用LoadFromStream
or存储它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
的 Component Palette 上找到Data Access
它。它的作用与其他任何 类似TDataSet
,这意味着您可以定义持久字段、插入/删除/编辑数据、过滤、创建索引等。
使用它的基础很简单:只需将它放在表单上,然后指定一个文件名。右键单击它,然后Fields Editor...
从弹出菜单中选择。当它出现时,右键单击Fields Editor
它,然后选择New Field
。定义您要存储的字段及其类型,就像您定义任何其他数据集一样。重复直到您在 CDS 中添加了所有需要的字段。然后关闭Field Editor
,再次右键单击TClientDataSet
;会有一个Create Dataset
以前没有的选项。选择它,您将拥有新的数据集。
现在您可以正常使用它了:创建索引、插入、编辑和删除记录(行)、搜索(使用Locate
)、过滤等等。它可以(通过 a TDataSource
)连接到任何数据感知控件,例如TDBGrid
,就像任何其他数据集一样。您还可以创建图形和备注字段,这在“普通”XML 中是极难做到的;CDS 负责为您编码和解码所有内容。