| Scalabium Software | |
| Knowledge for your independence'. | |
|  Home  Delphi and C++Builder
        tips | 
| #39: How can I save/load the information about font in INI/text-file? | 
| 
 | Sometimes you need to save/to load a font information in INI-file,
Registry or some text file. procedure SaveFont(FStream: TIniFile; Section: string; smFont: TFont); begin FStream.WriteString(Section, Ident + 'Name', smFont.Name); FStream.WriteInteger(Section, Ident + 'CharSet', smFont.CharSet); FStream.WriteInteger(Section, Ident + 'Color', smFont.Color); FStream.WriteInteger(Section, Ident + 'Size', smFont.Size); FStream.WriteInteger(Section, Ident + 'Style', Byte(smFont.Style)); end; procedure LoadFont(FStream: TIniFile; Section: string; smFont: TFont); begin smFont.Name := FStream.ReadString(Section, Ident + 'Name', smFont.Name); smFont.CharSet := TFontCharSet(FStream.ReadInteger(Section, Ident + 'CharSet', smFont.CharSet)); smFont.Color := TColor(FStream.ReadInteger(Section, Ident + 'Color', smFont.Color)); smFont.Size := FStream.ReadInteger(Section, Ident + 'Size', smFont.Size); smFont.Style := TFontStyles(Byte(FStream.ReadInteger(Section, Ident + 'Style', Byte(smFont.Style)))); end; 2. more hardly than first method, but result is compact. I use
this method in all own apps. procedure SaveFont(FStream: TIniFile; Section: string; smFont: TFont);
begin
  FStream.WriteString(Section, 'Font', smFont.Name + ',' +
                                       IntToStr(smFont.CharSet) + ',' +
                                       IntToStr(smFont.Color) + ',' +
                                       IntToStr(smFont.Size) + ',' +
                                       IntToStr(Byte(smFont.Style)));
end;
procedure LoadFont(FStream: TIniFile; Section: string; smFont: TFont);
var s, Data: string;
    i: Integer;
begin
  s := FStream.ReadString(Section, 'Font', ',,,,');
  try
    i := Pos(',', s);
    if i > 0 then
    begin
      {Name}
      Data := Trim(Copy(s, 1, i-1));
      if Data <> '' then
        smFont.Name := Data;
      Delete(s, 1, i);
      i := Pos(',', s);
      if i > 0 then
      begin
        {CharSet}
        Data := Trim(Copy(s, 1, i-1));
        if Data <> '' then
          smFont.Charset := TFontCharSet(StrToIntDef(Data, smFont.Charset));
        Delete(s, 1, i);
        i := Pos(',', s);
        if i > 0 then
        begin
          {Color}
          Data := Trim(Copy(s, 1, i-1));
          if Data <> '' then
            smFont.Color := TColor(StrToIntDef(Data, smFont.Color));
          Delete(s, 1, i);
          i := Pos(',', s);
          if i > 0 then
          begin
           {Size}
           Data := Trim(Copy(s, 1, i-1));
           if Data <> '' then
             smFont.Size := StrToIntDef(Data, smFont.Size);
           Delete(s, 1, i);
           {Style}
           Data := Trim(s);
           if Data <> '' then
             smFont.Style := TFontStyles(Byte(StrToIntDef(Data, Byte(smFont.Style))));
          end
        end
      end
    end;
  except
  end;
end;
3. as alternative for 1&2 methods I can offer the third -
you can create a temporary stream, save the wished font component
in this stream (Stream.SaveComponent) and then you can navigate
the byte-by-byte in stream, to convert each byte into hex (or
some other radix) and save into your text file as string. Each
byte is a two symbols for hex radix. For font reading - on the
contrary... 
 | 
 | 
|       | Copyright© 1998-2025, Scalabium
        Software. All rights reserved. |