Scalabium Software |
|
| Knowledge for your independence'. | |
#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. |