Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемка с использованием ini-файла, настройки параметров шрифта 
:(
    Опции темы
Khan
Дата 1.11.2006, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Доброе время суток! В своей программе хочу использовать ini-файл, для сохранения настроек шрифта. С размером, названием шрифта нормально, а вот со цветом, хотя и работает, но выдает такое сообщение [C++ Warning] Unit1.cpp(19): W8018 Assigning int to TColor . Мне это не нравится. Подскажите пожалуйста, что не так. И еще, каким путем сохранить стиль шрифта, как описать? У меня вот такой код чтения и записи ini:

Код:
Код

ini = new TIniFile(ChangeFileExt(Application->ExeName, ".INI"));
Memo1->Font->Name=ini->ReadString("Font","Name", Memo1->Font->Name);
Memo1->Font->Color=StrToInt(ini->ReadString("Font","Color",Memo1->Font->Color)); //ругается на эту строку
Memo1->Font->Size=StrToInt(ini->ReadString("Font","Size",Memo1->Font->Size));
Memo1->Font->Style=???
delete ini;

Код:
Код

TIniFile *ini;
ini = new TIniFile(ChangeFileExt(Application->ExeName,".INI"));
ini->WriteString("Font","Name", Memo1->Font->Name);
ini->WriteString("Font","Color", IntToStr(Memo1->Font->Color));
ini->WriteString("Font","Size",Memo1->Font->Size);
ini->WriteStringt("Font,"Style", ???)
delete ini;
Заранее благодарю!  
PM MAIL   Вверх
Bima
Дата 1.11.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 15.8.2006

Репутация: 2
Всего: 2



Я тоже как то мучился с этой проблемой. Напрямую со стилями не решил, а с цветом вроде все быдо нормально.
Правда я делал с реестром, но код переделать на 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


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.