Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TIniFile, Проблема ( надо записать значения цвета) 
V
    Опции темы
miklash90
Дата 2.4.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня проблема. Необходимо значение цвета сохранить в ini файл. Выводится ошибка: Cannot convert AnsiString to Tcolor.(Это при использовании ReadString и WriteString). Перепробовал все: и integer и float, но там выскакивают ошибки еще похлеще. Подскажите как быть (только не говорите что надо работать с реестром или конфигом, у меня уже вся прога на этом ini файле, а вот с цветом столкнулся впервые).
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Graphics.hpp:
Код

  enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вопрос. Куда это вставлять и как это связать с TIniFile?
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ответ: немного подумать. Что такое перечисление?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну я поставил куда надо. Только теперь как записать запрос на запись и на чтение.
Если писать Write/Read Integer выводятся ошибки:
[C++ Error] Unit2.cpp(33): E2034 Cannot convert 'char *' to 'int'
[C++ Error] Unit2.cpp(33): E2342 Type mismatch in parameter 'Default' (wanted 'int', got 'char *')
[C++ Warning] Unit2.cpp(33): W8018 Assigning int to Graphics::TColor

Если Write/Read String ,то:
[C++ Warning] Unit2.cpp(33): W8018 Assigning AnsiString to Graphics::TColor
[C++ Error] Unit2.cpp(33): E2034 Cannot convert 'AnsiString' to 'Graphics::TColor'
Как быть?
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(miklash90 @ 2.4.2006, 17:23 Найти цитируемый пост)
Ну я поставил куда надо.

нде... и что ты куда поставил, интересно мне знать?..

покажи, кстати, код...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "inifiles.hpp"
#include "graphics.hpp"
//---------------------------------------------------------------------
#pragma link "WinXP"
#pragma link "AdvSelectors"
#pragma resource "*.dfm"
TAboutBox *AboutBox;
TIniFile *Ini = new TIniFile("c:/options.ini");
enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};
//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
    : TForm(AOwner)
{
}
//---------------------------------------------------------------------

void __fastcall TAboutBox::OKButtonClick(TObject *Sender)
{
Ini->WriteString("SyntaxCh","Comments",AdvColorSelector1->SelectedColor);
}
//---------------------------------------------------------------------------


void __fastcall TAboutBox::FormCreate(TObject *Sender)
{
AdvColorSelector1->SelectedColor = Ini->ReadString("SyntaxCh","Comments","Def");
}
//---------------------------------------------------------------------------


Использовались компоненты TMS Components Pack

Это сообщение отредактировал(а) miklash90 - 2.4.2006, 17:29
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



AdvColorSelector1->SelectedColor имеет тип TColor? Тебе нужно записать это значение в ini-файл? Зачем ты подставил то, что я написал, в начало файла? Почему ты используешь метод WriteString?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне надо записать значение в ini файл.
Да. AdvColorSelector1->SelectedColor имеет тип TColor.
А как нужно делать?
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



miklash90, т.к. TColor - это перечисление, значит, значения этого типа могут быть восприняты как целочисленные. Так почему же ты используешь метод WriteString?


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну я понял что надо использовать не WriteString, но используя WriteInteger выпадают ошибки перечисленные выше. Так как записать запрос? Может я не туда вставил
enum TColor {clMin=-0x7fffffff-1, clMax=0x7fffffff};
или чего-то не договариваю.
PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



miklash90, нужно использовать WriteInteger. Покажи, как ты это делаешь.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Код

//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "inifiles.hpp"
#include "graphics.hpp"
//---------------------------------------------------------------------
#pragma link "WinXP"
#pragma link "AdvSelectors"
#pragma resource "*.dfm"
TAboutBox *AboutBox;
TIniFile *Ini = new TIniFile("c:/options.ini");

//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
    : TForm(AOwner)
{
}
//---------------------------------------------------------------------

void __fastcall TAboutBox::OKButtonClick(TObject *Sender)
{

Ini->WriteInteger("SyntaxCh","Comments",AdvColorSelector1->SelectedColor);
}
//---------------------------------------------------------------------------


void __fastcall TAboutBox::FormCreate(TObject *Sender)
{
AdvColorSelector1->SelectedColor = Ini->ReadInteger("SyntaxCh","Comments","Def");
}
//---------------------------------------------------------------------------


И выскакивают:
[C++ Error] Unit2.cpp(32): E2034 Cannot convert 'char *' to 'int'
[C++ Error] Unit2.cpp(32): E2342 Type mismatch in parameter 'Default' (wanted 'int', got 'char *')
[C++ Warning] Unit2.cpp(32): W8018 Assigning int to TColor


PM MAIL   Вверх
BreakPointMAN
Дата 2.4.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Естественно, выскакивают!

Смотрим, что пишет компилятор. Ага, ошибка в 32-ой строке! Что у нас там? А вот что:
Код

AdvColorSelector1->SelectedColor = Ini->ReadInteger("SyntaxCh","Comments","Def");


Ты смотрел, какие параметры должны быть у функции ReadInteger? Читаем справку:

Цитата

TCustomIniFile::ReadInteger

Retrieves an integer value from an INI file.

virtual int __fastcall ReadInteger(const AnsiString Section, const AnsiString Ident, int Default);

Description

Call ReadInteger to read an integer value from an INI file. Section identifies the section in the file that contains the desired key. Ident is the name of the key from which to retrieve the value. Default is the integer value to return if the:


  • Section does not exist.
  • Key does not exist.
  • Data value for the key is not assigned.



Третьим параметром должен быть параметр типа int, ты подставляешь строку "Def", ее тип - char*.

Именно поэтому компилятор говорит:

Цитата

[C++ Error] Unit2.cpp(32): E2034 Cannot convert 'char *' to 'int'
[C++ Error] Unit2.cpp(32): E2342 Type mismatch in parameter 'Default' (wanted 'int', got 'char *')

что означает: я не могу использовать char* вместо int! Хочу int!

Это сообщение отредактировал(а) BreakPointMAN - 2.4.2006, 18:16


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
miklash90
Дата 2.4.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здесь мне немного непонятно ( int Default ). Что сюда надо вставлять вместо "Def" (вообще и для моего случая)? Тут просто вот это третье значение в скобках непонятно.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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