Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли сохранять и считывать TFont из файла [D7, WinXP]


Гриха ©   (2005-08-16 04:18:00) 

Здравствуйте, уважаемые Мастера!
Написал миниатюрные экранные часы с ремайндером.
Для хранения данных о настройках пользователя использовал файл опций.
При каждом закрытии программы в него производится запись, а при открытии она считывается
Записывается примерно такая запись:

type opts = record
 dt:TDateTime;  \\ Время ремайндера
 op:Boolean;  \\ Прозрачность фона вокаруг часов
 xy:TPoint;  \\ Положение на экране
 f:TFont;  \\ шрифт, которым отображаются часы
end;
var
o:opts

Bсе работает, все применяется, кроме шрифта. А шрифт - по умолчанию. Применяю таким вот образом:

label1.font:=o.f;

Помогите, пожалуйста.

PS^ Здесь могут быть ошибки синтаксиса - Дельфы под рукой нет.


Пип   (2005-08-16 09:02:00) [1]

Hierarchy

TObject
 
TPersistent
 
TGraphicsObject
 
TFont


afanasic   (2005-08-16 08:56:00) [2]

Сохраняй отдельно FontName, Size и Bold... меньше головняков, а потом устанавливай...


Gydvin   (2005-08-16 06:45:00) [3]

function fonttostr(font:tfont):string;
     var
     s,p:string;
    begin
    if font.Style=[] then p:='[]';
  if font.Style=[fsBold] then p:='[fsBold]';
  if font.Style=[fsItalic] then p:='[fsItalic]';
  if font.Style=[fsBold,fsItalic] then p:='[fsBold,fsItalic]';
    s:=s+'name='+font.Name+'*'+
    'color='+colortostring(font.Color)+'*'+
    'Size='+inttostr(font.size)+'*'+
    'Height='+inttostr(font.Height)+'*'+'Style='+p;
   result:=s;

    end;

   function strtofont(s:string):tfont;
   var
   r:tstringlist;
   p:string;
    begin
    if s<>'' then begin
    result:=tfont.Create;
    r:=tstringlist.Create;
    r.Sorted:=false;
    while pos('*',s)>0 do begin
    r.Add(copy(s,1,pos('*',s)-1)) ;
    delete(s,1,pos('*',s)) ;
    end;
    if s<>'' then begin
     r.Add(s);
     s:='';
    end;

result.Name:=r.Values['name'];
result.Color:=stringtocolor(r.Values['color']);
result.Height:=strtoint(r.Values['Height']);
result.Size:=strtoint(r.Values['size']);
p:= r.Values['style'];
  if p='[]' then result.Style:=[] ;
  if p='[fsBold]' then result.Style:=[fsBold];
  if p='[fsItalic]' then result.Style:=[fsItalic];
  if p='[fsBold,fsItalic]' then result.Style:=[fsBold,fsItalic];
//  result.Charset:=DEFAULT_CHARSET;
//  result.Pitch:=fpDefault;

    r.Free;
   // result.Free;
    end;

    end;


Гриха   (2005-08-16 05:24:00) [4]

Спасибочки. Попробую...


Юрий Зотов   (2005-08-16 05:18:00) [5]

Сама Delphi ведь сохраняет фонты? Сохраняет. Значит, и нам можно.

Измените у формы любые свойства фонта, а потом просмотрите форму, как текст - и увидите, что и как там сохраняется.


Наверх

Титульная страница Поиск, карта сайта Написать письмо