Я тоже как то мучился с этой проблемой. Напрямую со стилями не решил, а с цветом вроде все быдо нормально. Правда я делал с реестром, но код переделать на ini файл не составит большого труда. чтение из реестра: | Код | //чтение данных из реестра if (Reg->KeyExists("\\Software\\my prog\\test")) { Reg->OpenKey("\\Software\\my prog\\test", true); //Заголовок друга FStyles(Reg->ReadString("Стиль шрифта")); Label1->Font->Assign(BSaveSetting->Font); Label1->Font->Name=Reg->ReadString("Имя шрифта"); Label1->Font->Size=Reg->ReadInteger("Размер шрифта"); Label1->Font->Color=(TColor)Reg->ReadFloat("Цвет шрифта"); ... }
|
Здесь вроде бы все ясно, кроме момента, где для чтения стиля я использую подпрограмму FStyles, которая записывает во временный Label (он прозрачный на форме), а следующей строчкой идет копирование стиля в нужный элемент Вот код подпрограммы: | Код | //--------------------------------------------------------------------------- void FStyles(AnsiString StylesFont) { if (StylesFont=="0000") Form1->BSaveSetting->Font->Style=Form1->Label1->Font->Style; if (StylesFont=="0001") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsStrikeOut; if (StylesFont=="0010") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsUnderline; if (StylesFont=="0011") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsUnderline<<fsStrikeOut; if (StylesFont=="0100") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsItalic; if (StylesFont=="0101") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsItalic<<fsStrikeOut; if (StylesFont=="0110") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsItalic<<fsUnderline; if (StylesFont=="0111") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsItalic<<fsUnderline<<fsStrikeOut; if (StylesFont=="1000") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold; if (StylesFont=="1001") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsStrikeOut; if (StylesFont=="1010") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsUnderline; if (StylesFont=="1011") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsUnderline<<fsStrikeOut; if (StylesFont=="1100") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsItalic; if (StylesFont=="1101") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsItalic<<fsStrikeOut; if (StylesFont=="1110") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsItalic<<fsUnderline; if (StylesFont=="1111") Form1->BSaveSetting->Font->Style=TFontStyles()<<fsBold<<fsItalic<<fsUnderline<<fsStrikeOut; }
|
Здесь BSaveSetting - это временный Label, который я упоминал раньше. Запись делается аналогично: | Код | if (Reg->OpenKey("\\Software\\my prog\\test",true)) { //Заголовок друга Reg->WriteString("Имя шрифта", Label1->Font->Name); Reg->WriteInteger("Размер шрифта", Label1->Font->Size); Reg->WriteFloat("Цвет шрифта", (float)Label1->Font->Color); Reg->WriteString("Стиль шрифта", Key(Label1)); ... }
|
Здесь тоже думаю все понятно, кроме стиля. Тут я использовал подпрограмму Key, которая преобразует стиль в цифровые данные. Вот код подрограммы Key: | Код | AnsiString Key(TLabel *LFont)//Определение стиля шрифта { if (LFont->Font->Style==TFontStyles()<<fsStrikeOut) return "0001"; if (LFont->Font->Style==TFontStyles()<<fsUnderline) return "0010"; if (LFont->Font->Style==TFontStyles()<<fsUnderline<<fsStrikeOut) return "0011"; if (LFont->Font->Style==TFontStyles()<<fsItalic) return "0100"; if (LFont->Font->Style==TFontStyles()<<fsItalic<<fsStrikeOut) return "0101"; if (LFont->Font->Style==TFontStyles()<<fsItalic<<fsUnderline) return "0110"; if (LFont->Font->Style==TFontStyles()<<fsItalic<<fsUnderline<<fsStrikeOut) return "0111"; if (LFont->Font->Style==TFontStyles()<<fsBold) return "1000"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsStrikeOut) return "1001"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsUnderline) return "1010"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsUnderline<<fsStrikeOut) return "1011"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsItalic) return "1100"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsItalic<<fsStrikeOut) return "1101"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsItalic<<fsUnderline) return "1110"; if (LFont->Font->Style==TFontStyles()<<fsBold<<fsItalic<<fsUnderline<<fsStrikeOut) return "1111"; return "0000"; }
|
Надеюсь это поможет в разработке программы. Хотя возможно решение не является оптимизированным. Это сообщение отредактировал(а) Bima - 1.11.2006, 07:41
--------------------
Чтобы дойти до цели, надо идти.
Клавиатура и мышь - это главные инструменты прогресса.
|