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

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

Сохранение параметров шрифта в ini- файле [D6, XP]


Andr ©   (2008-02-26 11:36:00) 

Подскажите как сохранить свойство Memo1.Font.style в ini- файле, как я понял style чтото вроде массива. Остальные параметры я сохраняю по одному, типа my_ini.WriteInteger('Font','Color',Memo1.Font.Color);, а может есть более лаконичный способ.
Заранее благодарен, Andr.


Andr   (2008-02-27 06:18:00) [1]

Спасибо всем за помощ по моему вопросу.


VirEx   (2008-02-26 18:53:00) [2]

ах да, обратно :)

procedure StrToFont(font:TFont;Value:String);
var
   s:string;
begin
 font.Name:=GetToken(Value,'|',1);
 font.Size:=StrToInt(GetToken(Value,'|',2));
 s:=GetToken(Value,'|',3);
 font.Color:=StringToColor(GetToken(Value,'|',4));
 if length(s) >2 then
 SetOrdProp(font,'Style',StringToSet(GetPropInfo(font,'Style'),s));
end;

GetToken - написать самому


VirEx   (2008-02-26 18:45:00) [3]

uses
 TypInfo {SetToString, GetPropInfo}, Graphics {ColorToString};

function FontToStr(font:TFont):String;
var
   style_:String;
begin
 result:='';
 style_:=SetToString(GetPropInfo(font,'Style'), byte(font.Style), false);
 with font do
   result := format('%s|%d|%s|%s',[name, size, style_,ColorToString(font.Color)]);
end;


Ega23   (2008-02-26 12:20:00) [4]


> TFontStyles(Byte(FIni.ReadInteger('FONTDATA', 'FStyle', 0)));


Я специально не стал так делать, чтобы чётко знать, где какой бит что обозначает...


{RASkov}   (2008-02-26 12:00:00) [5]

Еще вариант:
procedure GetFontFromIni(const FlIni: String; Fnt: TFont);
var FIni: TIniFile;
begin
 FIni:= TIniFile.Create(FlIni);
 try
  Fnt.Name:=FIni.ReadString('FONTDATA', 'FName', 'Courier New Cyr');
  Fnt.Color:=TColor(FIni.ReadInteger('FONTDATA', 'FColor', clBlack));
  Fnt.Pitch:=TFontPitch(FIni.ReadInteger('FONTDATA', 'FPitch', 0));
  Fnt.Size:=FIni.ReadInteger('FONTDATA', 'FSize', 8);
  Fnt.Style:=TFontStyles(Byte(FIni.ReadInteger('FONTDATA', 'FStyle', 0)));
 finally FIni.Free; end;
end;

procedure SetFontToIni(const FlIni: String; Fnt: TFont);
var FIni: TIniFile;
begin
 FIni:= TIniFile.Create(FlIni);
 try
  FIni.WriteString('FONTDATA', 'FName', Fnt.Name);
  FIni.WriteInteger('FONTDATA', 'FColor', Fnt.Color);
  FIni.WriteInteger('FONTDATA', 'FPitch', ORD(Fnt.Pitch));
  FIni.WriteInteger('FONTDATA', 'FSize', Fnt.Size);
  FIni.WriteInteger('FONTDATA', 'FStyle', Byte(Fnt.Style));
 finally FIni.Free; end;
end;

ну и пример использования (чтение):
 S:=ExtractFileDir(ParamStr(0))+'\memo.ini';
 GetFontFromIni(S, Memo1.Font);


Сергей М.   (2008-02-26 11:41:00) [6]

Можно сохранять и в виде набора строк (так как это выглядит в Инспекторе объектов), это и наглядней и зачастую удобней.


Сергей М.   (2008-02-26 11:40:00) [7]


> я понял style чтото вроде массива


Неправильно понял. Style - это множество, а не массив.

Сохраняй его как Integer


Ega23   (2008-02-26 11:40:00) [8]


function IntToFontStyle(const Value: integer): TFontStyles;
begin
Result:=[];
if ((Value shr 0) and 1)=1 then Result:=Result+[fsBold];
if ((Value shr 1) and 1)=1 then Result:=Result+[fsItalic];
if ((Value shr 2) and 1)=1 then Result:=Result+[fsUnderline];
if ((Value shr 3) and 1)=1 then Result:=Result+[fsStrikeout];
end;

function FontStyleToInt(const Value: TFontStyles): Integer;
begin
Result:=0;
if (fsBold in Value) then Result:=Result or 1;
if (fsItalic in Value) then Result:=Result or 2;
if (fsUnderline in Value) then Result:=Result or 4;
if (fsStrikeout in Value) then Result:=Result or 8;
end;


Наверх

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