Перейти к содержимому

Работа с графиками и диаграммами (TChart, Series)

    Сегодня мы поговорим о рисовании графиков с помощью C++Builder. Эту тему я решил затронуть потому, что на днях пришлось быстро написать программу для того же самого рисования графиков, и я подумал что, наверное, не одному мне это пригодится.

    Итак, меньше слов — больше дела, начнем:
    Для работы с графиками и диаграммами в C++Builder существует компонент TChart (вкладка Additional), вот его мы и положим на форму. Далее если нажать на Chart1 правой кнопкой мыши, и выбрать Edit Chart… , то Вы увидите окно настроек графика, стоит заметить, что график можно настраивать и изменять параметры и в ходе выполнения программы, тоесть его настройка на ограничивается одним окошком. Первая закладка окна настройки называется Series, нажмите Add(Добавить), и откроется окно выбора: можете добавить разные линии столбцы и тому подобные вещи. Давайте выберем линию (на странице выбора — Line), вы сразу увидите, что наш Chart1 заполнила линия, значения выбираются случайные, но нажмите F9 — и вы ее не увидите! Дальше сделаем так, что бы мы смогли увидеть нашу линию в процессе работы программы.
    Давайте положим на форму кнопку (Button) и напишем для нее такой обработчик события:

    void __fastcall TForm1::Button1Click(TObject *Sender) { Series1->Add(13,22,clRed); } 

    Теперь попробуйте откомпилировать программу(F9) и нажать кнопку(Button) — вы увидите нашу линию!
    Но тут есть один очень важный момент, в обработчике события мы работали уже не с Chart1, а с Series1, это очень важно.
    Замечу, если линий будет больше чем одна, тоесть Вы создадите Series2, Series3, то и работать в коде вы будете тоже с ними.
    Давайте усложним немного нашу программу и сделаем ее динамичней.
    На форму добавляем два компонента TEdit — в них мы будем вводить значения по оси Y и Х. Для кнопки изменяем обработчик события на такой:

     void __fastcall TForm1::Button1Click(TObject *Sender) { if(Edit1->Text == "") { ShowMessage("Вы не ввели значение Y !"); return ; } if(Edit2->Text == "") { ShowMessage("Вы не ввели значение X !"); return ; } int y; int x; y = Edit1->Text.ToInt(); x = Edit2->Text.ToInt(); Series1->Add(y,x,clBlue); Edit1->Text = ""; Edit2->Text = ""; } 

    Теперь подробно разберем написанное: Сначала мы описали проверки, ввел ли пользователь хоть какие-то данные Х и Y.

     if(Edit1->Text == "") { ShowMessage("Вы не ввели значение Y !"); return ; } if(Edit2->Text == "") { ShowMessage("Вы не ввели значение X !"); return ; } 

    Далее мы указали две переменных х и y.
    Но тут есть один важный момент, просто присвоить х = Edit1->Text , нельзя.
    Надо конвертировать AnsiString в Int32:
    y = Edit1->Text.ToInt();
    x = Edit2->Text.ToInt();
    Тоесть мы представляем текст Едита, как число.
    А дальше все похоже на наш первый пример: Series1->Add(13,22,clRed);
    Только вместо готовых чисел, мы добавляем х и у которые пишем в Едиты. Откомпилируйте программу и увидите, как прорисовывается линия по ходу добавления туда значений.
    Если разберетесь в TChart более подробно, то сможете: удалять последние веденные значения, убирать добавлять сетку, менять цвета линий, менять толщину линий и так далее.

    Макагон Сергей, http://devoid.com.ua  

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *