如何将字体(FontStyle,FontColor,FontSize)转换为字符串

时间:2013-10-03 16:01:23

标签: delphi delphi-7

我想在sql数据库中保存字体(FontStyle,FontColor,FontSize),为此,我需要将其保存为字符串。如何将Tfont转换为TString?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

在任何情况下,您都可以将流转换为十六进制序列。

答案 2 :(得分:0)

我看到其他人的代码很奇怪: 创建一个虚拟控件(TLabel),为其指定字体,然后保存为.dfm(二进制,然后是文本)。