Главная страницаОбратная связьКарта сайта

Сохранение параметров шрифта в 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;
  var
    iTmp: integer;
  begin
    Result := False;
    for iTmp := 1 to Length(s) do
    begin
      if c = Copy(s, iTmp, 1) then
      begin
        Result := True;
        Exit;
      end;
    end;
  end;
var

  c, t: string;
begin

  if s = "" then
  begin
    Result := s;
    Exit;
  end;
  c := Copy(s, 1, 1);
  while isoneof(c, sep) do
  begin
    s := Copy(s, 2, Length(s) - 1);
    c := Copy(s, 1, 1);
  end;
  t := "";
  while (not isoneof(c, sep)) and (s <> "") do
  begin
    t := t + c;
    s := Copy(s, 2, length(s) - 1);
    c := Copy(s, 1, 1);
  end;
  Result := t;
end;

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


Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация по разработке на Delph - "Сохранение параметров шрифта в INI-файле", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2024 Дискета.info