Scalabium Software

SMExport advertising
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.
Now I desribe the some different methods.

1. very easy but not result isn't compact and effective (by data storage)

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...
PS: personally I not used this method:)))


Published: November 5, 1999

See also
 
Metafile Convert
DBExport tools
Paradox to Text converter
Mail parser (ActiveX)
DBLoad
Fast Document Viewer
SMMsg suite
SMExport suite
ABA Picture Convert
ABA Document Convert
 
 


Contact to webmaster

 

Borland Software Code Gear Scalabium Delphi tips

Copyright© 1998-2023, Scalabium Software. All rights reserved.
webmaster@scalabium.com

SMExport advertising