Советы по Delphi

       

Сохранение параметров шрифта в INI-файле


Мое решение: (для сохранения всей иннформации об отдельном шрифте)

function FontToStr(font: TFont): string;
procedure yes(var str:string);
begin
str := str + 'y';end;
procedure no(var str:string);
begin
str := str + 'n';end;
begin
{кодируем все атрибуты TFont в строку}Result := '';Result := Result + IntToStr(font.Color) + '|';Result := Result + IntToStr(font.Height) + '|';Result := Result + font.Name + '|';Result := Result + IntToStr(Ord(font.Pitch)) + '|';Result := Result + IntToStr(font.PixelsPerInch) + '|';Result := Result + IntToStr(font.size) + '|';if fsBold in font.style then yes(Result) else no(Result);if fsItalic in font.style then yes(Result) else no(Result);if fsUnderline in font.style then yes(Result) else no(Result);if fsStrikeout in font.style then yes(Result) else no(Result);end;

procedure StrToFont(str: string; font: TFont);
begin
if str = '' then Exit;font.Color := StrToInt(tok('|', str));font.Height := StrToInt(tok('|', str));font.Name := tok('|', str);font.Pitch := TFontPitch(StrToInt(tok('|', str)));font.PixelsPerInch := StrToInt(tok('|', str));font.Size := StrToInt(tok('|', str));font.Style := [];if str[0] = 'y' then font.Style := font.Style + [fsBold];if str[1] = 'y' then font.Style := font.Style + [fsItalic];if str[2] = 'y' then font.Style := font.Style + [fsUnderline];if str[3] = 'y' then font.Style := font.Style + [fsStrikeout];end;

function tok(sep: string; var s: string): string;
function isoneof(c, s: string): Boolean;variTmp: integer;beginResult := False;for iTmp := 1 to Length(s) dobeginif c = Copy(s, iTmp, 1) thenbeginResult := True;Exit;end;end;end;var
c, t: string;begin
if
s = '' thenbeginResult := s;Exit;end;c := Copy(s, 1, 1);while isoneof(c, sep) dobegins := Copy(s, 2, Length(s) - 1);c := Copy(s, 1, 1);end;t := '';while (not isoneof(c, sep)) and (s <> '') dobegint := t + c;s := Copy(s, 2, length(s)-1);c := Copy(s, 1, 1);end;Result := t;end;

Если вы серьезно нуждаетесь в подобной технологии для сохранения свойств объектов, то я бы посоветовал вам создать наследника класса TIniFile, выполняющего подобные операции.

[000224]

Содержание раздела