Re: Tfont



On Sat, 27 Aug 2005 07:03:19 +1200, anthony wrote:

> so sorry to be a pain, but I am not sure how to call these procedures.
>
> "Pete" <nobody@xxxxxxxxxxx> wrote in message
> news:1sh4xcydzcr3u$.1r792894qh5b2$.dlg@xxxxxxxxxxxxx
>> On Fri, 26 Aug 2005 11:01:44 +1200, anthony wrote:
>>
>>> is it possible to turn a tFont into a string so I can save what the font
> of
>>> a certain component is
>>>
>>> I am want to store the fonts and background colors, so that when the
>>> appication restarts it will load the attributes for me.
>>>
>>> Anthony
>>
>> Here's a couple of solutions that I grabbed from an unknown Delphi page a
>> long time ago:
>>
>> 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;

Here's an example using SaveFont to get you started:

uses
IniFiles;

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 TForm1.Button1Click(Sender: TObject);
var
Ini : TIniFile;
begin
Ini:= TIniFile.Create('E:\Temp\MyFont.ini');
try
SaveFont(Ini, 'Config', Form1.Font);
finally
Ini.Free;
end;
end;
.


Quantcast