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
 
Clarion Viewer
MAPIMail
ABA Document Convert
DBISAM Viewer
SMExport suite
Fast Document Viewer
Protected Storage Viewer
Paradox to Text converter
Metafile Convert
Excel Web-stream
 
 


Contact to webmaster

 

Borland Software Code Gear Scalabium Delphi tips

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

SMExport/SMImport suites