Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];
ВнизСохранение параметров шрифта в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c