Сегодня мы поговорим о рисовании графиков с помощью 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