C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TChart, динамическое создание Series
Dimon.Ru
Отправлено: 03.08.2006, 14:13


Станционный диспетчер

Группа: Участник
Сообщений: 92



Здравствуйте!

У меня затык с динамическим созданием Series в TChart...

Добавляю так:
CODE
void *q;
int a;
a=Chart->SeriesList->Add(q);


тут компилятор все вроде проглатывает. и я получаю номер добавленной серии (как мне кажется).

Потом пытаюсь обратиться к серии
CODE
Chart->SeriesList->Series[a]->AddXY(...);

или
CODE
Chart->Series[a]->AddXY(...);

Ну и все такое...

и получаю Access Violation....

Серии данных мне нужно создавать динамически и это принципиально!

Примеров найти не могу...

Подскажите, как правильно создавать Series и как к ним правильно обращаться?

Спасибо.
Dimon.Ru
Отправлено: 03.08.2006, 14:24


Станционный диспетчер

Группа: Участник
Сообщений: 92



Вроде бы как нашел...
Вот здесь: Графики( TChart ) — использование
Guest
Отправлено: 03.08.2006, 15:03


Не зарегистрирован







CODE

void __fastcall TF_SNCChart::Button1Click(TObject *Sender)
{
TLineSeries *ser = new TLineSeries(this);
ser->ParentChart = Chart_SNC;
ser->HorizAxis   = aTopAxis;
ser->VertAxis    = aRightAxis;

ser->AddXY(1,8, "", clTeeColor);
ser->AddXY(2,3, "", clTeeColor);
ser->AddXY(3,7, "", clTeeColor);

ShowMessage(Chart_SNC->SeriesList->Count);
}

Dimon.Ru
Отправлено: 04.08.2006, 08:44


Станционный диспетчер

Группа: Участник
Сообщений: 92



Спасибо.

Вот этот фрагмент обязательно надо писать?
CODE

ser->ParentChart = Chart_SNC;
ser->HorizAxis   = aTopAxis;
ser->VertAxis    = aRightAxis;


Может быть поэтому у меня вылазиет Access Violation???

Мне вообще-то нужно создавать несколько серий данных.
Я пишу вот так:
CODE

int qj=10, qtt=30;

TChartSeries** NewSeries;
NewSeries = NULL;
NewSeries = new TChartSeries*[qj];

for(int j=0; j<qj; j++)
{
  NewSeries[j] = new TChartSeries(this);
  NewSeries[j]->Name = "Front_"+IntToStr(j);
  int Number=OtherGrafixChart->SeriesList->Add(NewSeries[j]);
  for(int t=0; t<qtt; t++)
  OtherGrafixChart->SeriesList->Series[j]->AddXY(TauF[t],Front[j][t],"",clBlack);
     }


Массивы TauF,Front есть.

Все вроде бы выполняется без ошибок, но потом возникает AV....
Помогите разобраться, пожалуйста.
Guest
Отправлено: 04.08.2006, 09:15


Не зарегистрирован







QUOTE (Dimon.Ru @ 04/08/2006, 08:44)

Вот этот фрагмент обязательно надо писать?
CODE

ser->ParentChart = Chart_SNC;
ser->HorizAxis = aTopAxis;
ser->VertAxis = aRightAxis;


Не весь.
ser->ParentChart = Chart_SNC; — обязательно
ser->HorizAxis = aTopAxis; — по желанию и так как вам надо
ser->VertAxis = aRightAxis; — по желанию и так как вам надо

Про парент прочтите в help. Там есть еще другой способ, но главное:
серии на chart НЕ добавляются при помощи SeriesList->Add
для этой операции есть специальный метод и способ.
Кстати, все это есть в хелпе.
Dimon.Ru
Отправлено: 04.08.2006, 09:37


Станционный диспетчер

Группа: Участник
Сообщений: 92



Спасибо. В Helpe-то может и есть, но у меня Builder 5й, ломаный. не всё в справке есть sad.gif(( соответственно примеров — тоже нет.

Встроенная справка — это то, куда я первым делом полез...

Потом тока сюда...

Еще вопросик: Вы использыете TLineSeries. А TChartSeries не подходит?

Мой код, что бы работал, надо переписать примерно так:
CODE

int qj=10, qtt=30;

TLineSeries** NewSeries;
NewSeries = NULL;
NewSeries = new TLineSeries*[qj];

for(int j=0; j<qj; j++)
{
NewSeries[j] = new TLineSeries(this);
NewSeries[j]->Name = "Front_"+IntToStr(j);

NewSeries[j]->ParentChart = OtherGrafixChart;

for(int t=0; t<qtt; t++)
OtherGrafixChart->Series[j]->AddXY(TauF[t],Front[j][t],"",clBlack);
}


Я Вас правильно понял?

Отредактировано Dimon.Ru — 04/08/2006, 09:44
Guest
Отправлено: 04.08.2006, 10:09


Не зарегистрирован







У меня то же 5-й ломаный. Help rar 15M, отдать не жалко.

>Вы использыете TLineSeries. А TChartSeries не подходит?
Думаю подходит. TLineSeries — была первая в списке.

>Мой код, что бы работал, надо переписать примерно так:
Вам виднее, главное использовать ParentChart.
Из приведенного куска я не вижу смысла в использовании TLineSeries** NewSeries;. Список итак накпливается в OtherGrafixChart->SeriesList
Dimon.Ru
Отправлено: 04.08.2006, 10:25


Станционный диспетчер

Группа: Участник
Сообщений: 92



QUOTE
Help rar 15M, отдать не жалко

15M боюсь у меня ни один ящик не выдержит...

И как я понял, если мне нужно добавить несколько series, то мне не обязательно создавать массив? можно создать один элемент и добавлять его последовательно? В ТЧарте будут создаваться новые элементы?

Отредактировано Dimon.Ru — 04/08/2006, 11:27
Guest
Отправлено: 04.08.2006, 11:00


Не зарегистрирован







CODE

int qj=10, qtt=30;

for(int j=0; j<qj; j++)
{
T_???_Series* ser = new T_???_Series(this);
ser->ParentChart = OtherGrafixChart;

for(int t=0; t<qtt; t++)
 ser->AddXY(TauF[t],Front[j][t],"",clBlack); // зависит от типа
}


BCB5 help (14M)
BCB5 Examples (3M)
В понедельник уберу.
Dimon.Ru
Отправлено: 04.08.2006, 13:09


Станционный диспетчер

Группа: Участник
Сообщений: 92



все скачал. буду разбираться smile.gif))
еще раз: СПА-СИ-БО!

Вернуться в Вопросы программирования в C++Builder