在 Tiburon 中,我可以在诸如 TMemo, TListBox, TComboBox (和其它包含字符的 lists)等控件中使用 Unicode 字符。那如何从一个文件中加载、保存 strings 呢?我需要在已经用 Delphi 和 C++ Builder 写好的程序中做什么样的更改才能为这些组件处理 Unicode 字符呢?下面就是答案:
在 LoadFromFile 和 SaveToFile 方法中,出现了一个新的、可选的参数。可选参数名字是 "Encoding",其类型是 "TEncoding"。TEncoding (该类型声明在 SysUtils 单元内)几个 class properties,可以帮助您指定加载或者保存的 strings 的类型:ASCII, BigEndianUnicode, Default, Unicode, UTF7, UTF8。
下面是 LoadFormFile 和 SaveToFile 在包含 TStrings 类型的控件中的声明(声明在 Classes 单元中):
Delphi:
procedure TStrings.LoadFromFile(const FileName: string);
procedure TStrings.LoadFromFile(const FileName: string; Encoding: TEncoding);
procedure TStrings.SaveToFile(const FileName: string);
procedure TStrings.SaveToFile(const FileName: string; Encoding: TEncoding);
C++Builder:
virtual void __fastcall LoadFromFile(const System::UnicodeString FileName);
virtual void __fastcall LoadFromFile(const System::UnicodeString FileName, Sysutils::TEncoding* Encoding);
virtual void __fastcall SaveToFile(const System::UnicodeString FileName);
virtual void __fastcall SaveToFile(const System::UnicodeString FileName, Sysutils::TEncoding* Encoding);
查看 Delphi 中 implementation 部分的 SaveToFile 方法,可以看到它使用了 TStream 来保存带有 TEncoding 信息的 strings:
procedure TStrings.SaveToFile(const FileName: string);
begin
SaveToFile(FileName, nil);
end;
procedure TStrings.SaveToFile(const FileName: string; Encoding: TEncoding);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
SaveToStream(Stream, Encoding);
finally
Stream.Free;
end;
end;
下面的示例展示了如何在你的窗体上用 ListBox 控件加载和保存 strings:
在 LoadFromFile 和 SaveToFile 方法中,出现了一个新的、可选的参数。可选参数名字是 "Encoding",其类型是 "TEncoding"。TEncoding (该类型声明在 SysUtils 单元内)几个 class properties,可以帮助您指定加载或者保存的 strings 的类型:ASCII, BigEndianUnicode, Default, Unicode, UTF7, UTF8。
下面是 LoadFormFile 和 SaveToFile 在包含 TStrings 类型的控件中的声明(声明在 Classes 单元中):
Delphi:
C++Builder:
查看 Delphi 中 implementation 部分的 SaveToFile 方法,可以看到它使用了 TStream 来保存带有 TEncoding 信息的 strings:
procedure TStrings.SaveToFile(const FileName: string);
begin
end;
procedure TStrings.SaveToFile(const FileName: string; Encoding: TEncoding);
var
begin
end;
下面的示例展示了如何在你的窗体上用 ListBox 控件加载和保存 strings:
Delphi:
C++Builder:
这是上面这个 Delphi 例子程序的屏幕截图:
使用 Tiburon,现在我的 Delphi 和 C++ Demo 程序可以在列表框、编辑框和标签上使用 Uincode 字符了,而且我也可以直接在硬盘上读写 Unicode 的 strings。
原文地址:http://blogs.codegear.com/davidi/2008/07/15/38898/
翻译:峪飞鹰
转载请注明出处!