Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Цвет графика в зависимости от значения


Автор: Дося 12.3.2006, 23:51
Народ! Помогите, пожалуйста, замучался совсем... smile
Вот график DBChart.

user posted image

Мне надо сделать, к примеру, если значение от 0 до 2, то столбец был зелёного цвета. Если от 2 до 4 - жёлтого, и т.д. Возможно ли это сделать?.. Очень нужно. Помогите, плиз... smile

Автор: tigger 13.3.2006, 14:45
Используй метод ColorRange, он позволяет задавать цвет по числовому диапазону.

Автор: tigger 13.3.2006, 15:10
Ах да пример забыл:

Код


DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,0,2,clGreen);
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,2,4,clYellow);



Автор: Дося 13.3.2006, 18:22
Спасибо!!! Заработало!!! Очень благодарен! Респект! smile

Автор: Дося 13.3.2006, 21:12
Ещё небольшой/большой вопросик. smile А можно сделать, чтобы пользователь сам мог задавать интервалы, не суя носа в код? К примеру, на форме сделать с Edit.

user posted image

Использую такой код:

Код
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);


Всё работает, но этот код только для первого столбца. А если пользователь динамически захочет менять кол-во столбцов? smile И как сделать, чтобы сохранялись настройки? А то при очередном включении программы по-новой надо вводить интервал и цвет... smile

Автор: _hunter 14.3.2006, 11:21
для этого можно позаносить индексы/названия столбцов в тот же ComboBox и выбирать из него столбец для релактирования.
для сохранения цветов в момент редактирования записывай полученные значения в файл ( с указанием индекса )

Автор: Дося 14.3.2006, 11:31
У меня 6 DBChart'ов, в каждом по 2 столбца. Мне не надо для каждого по отдельности задавать цвета - для всех одинаково в зависимости от значения.

user posted image

А как записывать в файл? Не мог бы примерчик привести. Тебе лекго говорить, когда в этом хорошо понимаешь. А я просто начинающий, поэтому мне трудновато... smile

Пишу вот так:
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);
DBChart2->Series[0]->ColorRange(DBChart2->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);
DBChart3->Series[0]->ColorRange(DBChart3->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);
DBChart4->Series[0]->ColorRange(DBChart4->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);
DBChart5->Series[0]->ColorRange(DBChart5->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);
DBChart6->Series[0]->ColorRange(DBChart6->Series[0]->YValues,StrToInt(Edit1->Text),StrToInt(Edit2->Text),ColorBox1->Selected);

Автор: _hunter 14.3.2006, 11:39
как это:
Цитата(Дося @ 13.3.2006, 20:12 Найти цитируемый пост)
А если пользователь динамически захочет менять кол-во столбцов?

связанно с этим:
Цитата(Дося @ 14.3.2006, 10:31 Найти цитируемый пост)
У меня 6 DBChart'ов, в каждом по 2 столбца.

?
или я чего-то пропустил?

насчет записи в файл почитай справку/поищи на форуме TFileStream

Автор: Дося 14.3.2006, 11:47
Понимать это следует так: пользователь может задавать любой интервал и к нему цвет. Значения - от 0 до 11 включительно. К примеру, пользователь захочет сделать два интервала - первый от 0 до 5 с жёлтым цветом, второй - от 6 до 11 с зелёным. Или три интервала надумает сделать.
До этого я использовал такой код:

DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,0,2,clLime);
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,2,4,clGreen);
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,4,6,clYellow);
DBChart1->Series[0]->ColorRange(DBChart1->Series[0]->YValues,6,11,clRed);
DBChart2->Series[0]->ColorRange(DBChart2->Series[0]->YValues,0,2,clLime);
DBChart2->Series[0]->ColorRange(DBChart2->Series[0]->YValues,2,4,clGreen);
DBChart2->Series[0]->ColorRange(DBChart2->Series[0]->YValues,4,6,clYellow);
DBChart2->Series[0]->ColorRange(DBChart2->Series[0]->YValues,6,11,clRed);
DBChart3->Series[0]->ColorRange(DBChart3->Series[0]->YValues,0,2,clLime);
DBChart3->Series[0]->ColorRange(DBChart3->Series[0]->YValues,2,4,clGreen);
DBChart3->Series[0]->ColorRange(DBChart3->Series[0]->YValues,4,6,clYellow);
DBChart3->Series[0]->ColorRange(DBChart3->Series[0]->YValues,6,11,clRed);
DBChart4->Series[0]->ColorRange(DBChart4->Series[0]->YValues,0,2,clLime);
DBChart4->Series[0]->ColorRange(DBChart4->Series[0]->YValues,2,4,clGreen);
DBChart4->Series[0]->ColorRange(DBChart4->Series[0]->YValues,4,6,clYellow);
DBChart4->Series[0]->ColorRange(DBChart4->Series[0]->YValues,6,11,clRed);
DBChart5->Series[0]->ColorRange(DBChart5->Series[0]->YValues,0,2,clLime);
DBChart5->Series[0]->ColorRange(DBChart5->Series[0]->YValues,2,4,clGreen);
DBChart5->Series[0]->ColorRange(DBChart5->Series[0]->YValues,4,6,clYellow);
DBChart5->Series[0]->ColorRange(DBChart5->Series[0]->YValues,6,11,clRed);
DBChart6->Series[0]->ColorRange(DBChart6->Series[0]->YValues,0,2,clLime);
DBChart6->Series[0]->ColorRange(DBChart6->Series[0]->YValues,2,4,clGreen);
DBChart6->Series[0]->ColorRange(DBChart6->Series[0]->YValues,4,6,clYellow);
DBChart6->Series[0]->ColorRange(DBChart6->Series[0]->YValues,6,11,clRed);

По 4 интервала на каждый DBChart. Вот я и хочу, чтобы в настройках пользователь мог сам вручную устанавливать значения интервалов и к ним цвета. Может, я не в том направлениии думаю? Т.е. подскажите лучший подход? Спасибо!

Автор: _hunter 14.3.2006, 11:53
берем два Edit' а ( можно spin ) за ним лепим панельку ( чтобы цвет смотреть можно было ) и кнопку "применить".
в edit' ы заносятся начало/конец интервалов. по кнопке цвета меняются/пишутся в файла ( еще проверку на пересечение интервалов прилепить нужно )
как бы все...

Автор: Дося 14.3.2006, 12:04
А если так:

user posted image

Как думаешь?

Автор: _hunter 14.3.2006, 12:18
можно и так...

Автор: Дося 14.3.2006, 13:05
А как в файл сохранить какой был выбран цвет? smile

Автор: _hunter 14.3.2006, 14:37
как простой int

Автор: Дося 14.3.2006, 15:41
Не получается у меня никак... smile Не смог бы, пожалуйста, подробнее написать, как сохранить в файл и потом использовать его в программе? Могу, если надо, выложить программу саму...

Автор: _hunter 14.3.2006, 15:53
в чем, конкретно, проблемы?

Автор: Дося 14.3.2006, 16:00
Не доходит до меня, как сохранить всё в файл, а потом считать с него. Ну сделал я ту форму:

user posted image

А что дальше делать, не представляю... smile smile

Делаю

int interval, cvet;
double s, do;
...
interval = StrToInt(Edit1->Text);
s = StrToFloat(Edit2->Text);
do = StrToFloat(Edit3->Text);
cvet = ColorBox1->Items->IndexOf(ColorBox1->Selected); , но получаю -1.

Помогите, плиз... smile

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