我想在 sql 数据库中保存字体(FontStyle,FontColor,FontSize),为此,我需要将其保存为字符串。如何将 Tfont 转换为 TString?
问问题
2189 次
3 回答
5
要存储字体,您只需要字体的主要属性而不是全部。我这样做是为了将字体保存到 INI 文件中。您可以轻松地将其转换为返回字符串 (TString) 的函数:
procedure TMyIniFile.WriteFont(CONST Section, Ident: string; Value: TFont);
begin
WriteString (Section, Ident + 'Name', Value.Name);
WriteInteger(Section, Ident + 'CharSet', Value.CharSet);
WriteInteger(Section, Ident + 'Color', Value.Color);
WriteInteger(Section, Ident + 'Size', Value.Size);
WriteInteger(Section, Ident + 'Style', Byte(Value.Style));
end;
于 2014-04-06T08:56:24.540 回答
3
真的有必要将字体参数存储为字符串吗?我可以为您提供将字体存储为 BLOB:
procedure SaveFontToStream(AStream: TStream; AFont: TFont);
var LogFont: TLogFont;
Color: TColor;
begin
if GetObject(AFont.Handle, SizeOf(LogFont), @LogFont) = 0 then
RaiseLastOSError;
AStream.WriteBuffer(LogFont, SizeOf(LogFont));
Color := AFont.Color;
AStream.WriteBuffer(Color, SizeOf(Color));
end;
procedure LoadFontFromStream(AStream: TStream; AFont: TFont);
var LogFont: TLogFont;
F: HFONT;
Color: TColor;
begin
AStream.ReadBuffer(LogFont, SizeOf(LogFont));
F := CreateFontIndirect(LogFont);
if F = 0 then
RaiseLastOSError;
AFont.Handle := F;
AStream.ReadBuffer(Color, SizeOf(Color));
AFont.Color := Color;
end;
在任何情况下,您都可以将流转换为十六进制序列。
于 2013-11-27T16:19:19.313 回答
0
我看到别人的相当奇怪的代码这样做:创建一个虚拟控件(TLabel),为其分配您的字体,然后保存为.dfm(二进制,然后是文本)。
于 2017-06-19T10:56:16.847 回答