Поиск:

Ответ в темуСоздание новой темы Создание опроса
> программное создание серий графика 
V
    Опции темы
gordmiand
Дата 14.8.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажите как программно создать (и работать с нимив дальнейшем) заданное n- количество новых серий для имеющегося "чистого" графика Chart?
PM MAIL   Вверх
volvo877
Дата 14.8.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

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



Очень просто:

Код
    for(int i = 0; i < 10; i++) {
        TLineSeries *new_serie = new TLineSeries(NULL); // Создаем 10 LineSeries
        new_serie->Title = "Serie" + IntToStr(i);
        new_serie->Color = clRed;
        Chart1->AddSeries(new_serie);
    }
, а теперь заносим во вторую серию 20 точек со случайной ординатой:
Код
    for(int i = 0; i < 20; i++) {
        Chart1->Series[2]->AddY(random(100), "", clBlue);
    }

PM MAIL   Вверх
mrbrooks
Дата 15.8.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



более того эта тема 100% поднималась на форуме.
PM MAIL   Вверх
Annihilator
Дата 17.8.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


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

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



делал я тут как-то smile
Код

void TForm1::graph(int m, float *mas)
{
    const int graph_quan=1; // колическтво графиков (можно ввести с клавы -сам решишь)
    static TFastLineSeries **line;  // TFastLine - тип графика
    static h=1; // будем каждый раз строить с аргументом (h*n)
    float  j=2;
    int n;
    randomize();
    if (Chart1->SeriesCount())// если до этого в нашем чарте были графики
    {
        for (n = 1; Chart1->SeriesCount(); n++)
        delete line[n-1];
        delete line;
    }
    line = new TFastLineSeries*[graph_quan];  // указатель на массив серий
    for (int n = 1; n <= graph_quan; n++,h++)
    {
        line[n-1]= new TFastLineSeries(Chart1); // создадим саму серию
        line[n-1]->SeriesColor=(n%2)?(clRed):(clGreen);    // цвет если хошь
        line[n-1]->LinePen->Width=1.6;    // толщину если хошь
        Chart1->AddSeries(line[n-1]);    // добавим серию к нашему чарту
        for (int i=0; i<m; i++,j+=28.0/m)
        Chart1->Series[n-1]->AddXY(j, *(mas+i));
    }

}



--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
gordmiand
Дата 19.8.2008, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажите пож-та по этой же тематике как программно можно использовать легенду (видима/невидима), толщину линий и подписи по осям...
PM MAIL   Вверх
petlyura
Дата 19.8.2008, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

Chart1->Legend->Alignment = laBottom; // расположение легенды
Chart1->Legend->Visible = true; // false; видимость легенды

Chart1->LeftAxis->SetMinMax( 0, 1001 ); // пределы на левой оси
Chart1->LeftAxis->LabelsOnAxis = false; // показывать мин и макс
Chart1->LeftAxis->Labels = true; // показывать метки


Есть такое событие OnGetAxisLabel, так вот в нем можно творить следующее:
Код

//------------------------------------------------------------------------------
void __fastcall TСhart::GetAxisLabel(TChartAxis*Sender,TChartSeries*Series, int ValueIndex,String& LabelText)
{
if(!Sender->Horizontal)  // только для оси абсцисс
   return;
TDateTime d = CurrentDateTime;  // расчеты, что выводить
d=d-(double)(CurrentPoint-StrToFloat(LabelText))*DateTimeStep[dtOneSecond];
TDateTime LastTime=d-(int)d;

LabelText=LastTime;   // выводить то, что в LastTime
}


А перед этим можно настройки оси абсцисс выполнить

Код

Chart1->BottomAxis->Labels = true;
Chart1->BottomAxis->MinorTickLength = 0;
Chart1->BottomAxis->TickOnLabelsOnly = 0;
Chart1->BottomAxis->Automatic=false;
Chart1->BottomAxis->AutomaticMaximum = false;
Chart1->BottomAxis->AutomaticMinimum = false;
Chart1->BottomAxis->RoundFirstLabel=false;
Chart1->BottomAxis->LabelStyle=talValue;
Chart1->BottomAxis->LabelsFont->Charset = DEFAULT_CHARSET;
Chart1->BottomAxis->LabelsFont->Height = -10;
Chart1->BottomAxis->LabelsFont->Style.Clear();
Chart1->BottomAxis->LabelsSize = 0;
Chart1->BottomAxis->AxisValuesFormat="######0.#";
Chart1->BottomAxis->Ticks->Color = clBlack;

PM MAIL   Вверх
gordmiand
Дата 20.8.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажите пож-та как сделать очистку графиков, созданных динамически?

я делаю так:

Код


if (Chart1->SeriesCount())      

{
        for (n = 0; n<Chart1->SeriesCount(); n++)
        delete Chart1->Series[n];                                   //удаление имеющихся (если есть) серий
}




   for(int i = 0; i < 5; i++) 
    {
        TLineSeries *seria = new TLineSeries(NULL); 
        Chart1->AddSeries(seria);
    }




но при вариациях количества отображаемых динамически созданных серий выдается ошибка (access violation at address ...) - что-то не нравится удаление дин-х серий.....в чем ошибка или может не так их надо очищать?



PM MAIL   Вверх
mrbrooks
Дата 20.8.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



очистку делай так же в цикле
 
Код

for (n = 0; n<Chart1->SeriesCount(); n++) Series[n]->Clear();

PM MAIL   Вверх
gordmiand
Дата 27.8.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажиет как программно задавать тип создаваемой серии (и особенно тип серии 3D)
PM MAIL   Вверх
gordmiand
Дата 28.8.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Код


  if (Chart30->SeriesCount())      

{
        for (n = 0; n<Chart30->SeriesCount(); n++)
        delete Chart30->Series[n];
}





  for(int nfg = 0; nfg < Kolser; nfg++)
    {
        TLineSeries *new_serie = new TLineSeries(NULL); 
        Chart30->AddSeries(new_serie);

    }


по идее должно создаватсья ровно Kolser-серий, но судя по количеству серий в легенде данного чарта - это не так....в чем ошибка??? подскажите пожаааалуйста как правильно это сделать!!!!!
и скажите как программно задавать тип создаваемой серии (и особенно тип серии 3D)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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