Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как сохранить в реестре стиль текста


Автор: User 28.2.2005, 09:49
Почему дельфи ругается на нижеприведенную запись?

procedure TOptions.FormActivate(Sender: TObject);
var
FIniFile : TRegIniFile; // Для чтения данных из реестра
begin
FIniFile :=TRegIniFile.Create('Software'); // Инициализация реестра
FIniFile.OpenKey('ORGANAZER', true); // Открываю раздел 1
FIniFile.OpenKey('Options', true); // Открываю раздел 2

dxCheckEdit1.Checked := FIniFile.ReadBool('Options_Name', 'Name', dxCheckEdit1.Checked);
dxGraphicEdit2.Style.BorderColor := FIniFile.ReadInteger('Options_Name', 'Name20', dxGraphicEdit2.Style.BorderColor);

dxGraphicEdit2.Font.Style := FIniFile.ReadString('Options_Name', 'Name21', dxGraphicEdit2.Font.Style);

FIniFile.Free;

dxGraphicEdit2.Font.Style := FIniFile.ReadString('Options_Name', 'Name21', dxGraphicEdit2.Font.Style); - на эту строку почемуто дельфи ругаеться. Вопрос как сохранить в реестре стиль текста. (попробывал и в String, Bool, Integer - не с чем работать не хочет?) И как можно это сохранить, я все перепробывал, но так и не получилось!

Добавлено @ 09:50
Код я извеняюсь для загрузке но для сохранения практически идентичен

procedure TOptions.Button7Click(Sender: TObject);
var
FIniFile : TRegIniFile;
begin
FIniFile :=TRegIniFile.Create('Software'); // Инициализация реестра
FIniFile.OpenKey('ORGANAZER', true); // Открываю раздел 1
FIniFile.OpenKey('Options', true); // Открываю раздел 2

FIniFile.WriteString('Options_Name', 'Name21', dxGraphicEdit2.Font.Style); // Сохраняю в реестре значения

FIniFile.Free;

Автор: Александра 28.2.2005, 10:47
по простому:

1. сохраняем так:

Код
f.WriteBool('options_name', 'name_b', fsBold in font.Style);
 f.WriteBool('options_name', 'name_i', fsItalic in font.Style);
 f.WriteBool('options_name', 'name_u', fsUnderline in font.Style);
 f.WriteBool('options_name', 'name_s', fsStrikeOut in font.Style);


2. а загружаем так:

Код
font.style := [];
 if F.ReadBool('options_name', 'name_b', false) then font.style := font.style + [fsBold];
 if F.ReadBool('options_name', 'name_i', false) then font.style := font.style + [fsItalic];
 if F.ReadBool('options_name', 'name_u', false) then font.style := font.style + [fsUnderline];
 if F.ReadBool('options_name', 'name_s', false) then font.style := font.style + [fsStrikeOut];

Автор: Snowy 28.2.2005, 10:51
Можно попробовать вот такой не очень честный способ:
Код

function FStyleToInt(fs:TFontStyles):integer;
type
 TFStyle=packed record
   case integer of
     0: (fstyle: TFontStyles);
     1: (istyle: integer);
 end;
var
 st: TFStyle;
begin
 st.istyle:=0;
 st.fstyle:=fs;
 result:=st.istyle;
end;

Для обратной конвертации то же самое, только местами поменять.
Хотя для таких маленьких множеств можно просто перечислить все возможные комбинации (если они не изменятся)...

Автор: User 28.2.2005, 13:16
Спасибо за подсказку, вот о таком способе что то не подумал! СПАСИБО !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)