Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

Сохранение параметров шрифта в ini- файле   Найти похожие ветки 

 
Andr ©   (2008-02-26 11:36) [0]

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


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


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


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

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


 
Ega23 ©   (2008-02-26 11:40) [2]


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;


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

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


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

Еще вариант:
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);


 
Ega23 ©   (2008-02-26 12:20) [5]


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


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


 
VirEx ©   (2008-02-26 18:45) [6]

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;


 
VirEx ©   (2008-02-26 18:53) [7]

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

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 - написать самому


 
Andr ©   (2008-02-27 06:18) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2008.03.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1203627666
Юра
2008-02-22 00:01
2008.03.23
архивация


2-1203575014
vegarulez
2008-02-21 09:23
2008.03.23
Вопрос про TEdit. Как отследить ввод тока цифр.


2-1204008737
Рома....
2008-02-26 09:52
2008.03.23
Потоки


2-1203487534
snake-as
2008-02-20 09:05
2008.03.23
Работа с числами


2-1203588470
oleg_teacher
2008-02-21 13:07
2008.03.23
Свое расширение на файл.