![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение параметров шрифта в 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;