С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 21.06.2014
Сообщений: 1

Динамическое изменение количества точек на графике (TChart)

07.10.2014, 15:19. Показов 2211. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Возникла проблема при изменении количества отображаемых точек на графике.
Задача состоит в следующем. Есть массив графиков, на них строиться кривая. По умолчанию на графике отображается 20 значений (точек). С помощью компонента TTrackBar изменять количество значений (точек) на графике.
Что сделано:
1) Инициализация графиков
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
for(i = 0; i < MAX_PARAM_GRAF; i++){
 
        work_graf_panel[i] = new TPanel(main_Form);
        work_graf_panel[i]->Parent = work_param_panel;
        work_graf_panel[i]->BevelInner = bvRaised;
        work_graf_panel[i]->BevelOuter = bvRaised;
        work_graf_panel[i]->Visible = false;
        // Классы
        graf[i] = new TChart(main_Form);
        SeriesX[i] = new TLineSeries(graf[i]);
        graf[i]->AddSeries(SeriesX[i]);
        graf[i]->Parent = work_graf_panel[i];
        graf[i]->View3D = false;
        graf[i]->Legend->Visible = false;
        graf[i]->Visible = true;
        // Надпись в графике
        graf[i]->Title->Visible = true;
        graf[i]->Title->CustomPosition = true;
        graf[i]->Title->Left = 50;
        graf[i]->Title->Top = 1;
        graf[i]->Title->Font->Size = 10;
        graf[i]->Title->Font->Style = TFontStyles() << fsBold;
        graf[i]->Title->Font->Color = 0xd5d5d5;
        graf[i]->Title->Font->Name = "Tahoma";
        graf[i]->SubTitle->Visible = true;
        graf[i]->SubTitle->CustomPosition = true;
        graf[i]->SubTitle->Font->Size = 23;
        graf[i]->SubTitle->Font->Color = 0xe5e5e5;
        graf[i]->SubTitle->Font->Name = "Tahoma";
        // Левая шкада ОУ
        graf[i]->Axes->Left->Automatic = false;
        graf[i]->Axes->Left->Labels = true;
        graf[i]->Axes->Left->LabelsSize = 35;
        graf[i]->Axes->Left->LabelsFont->Color = 0xffffff;
        graf[i]->Axes->Left->Grid->Style = psSolid;
        graf[i]->Axes->Left->Grid->Color = 0x474543;
        graf[i]->Axes->Left->Grid->Width = 0;
        graf[i]->Axes->Left->LabelsOnAxis = false;
        // Нижняя шкала ОХ
        graf[i]->Axes->Bottom->Minimum = 0;
        graf[i]->Axes->Bottom->Maximum = 20;
        graf[i]->Axes->Bottom->Visible = false;
        // Цвета
        graf[i]->Color = 0x646464;
        //Зум
        graf[i]->AllowZoom = false;
        graf[i]->AllowPanning = TPanningMode::pmVertical;
        // Рамки внутри графика
        graf[i]->Walls->Back->Color = 0x5e0000;
        graf[i]->Walls->Back->Transparent = false;
        // Парамнтры размера графика внутри рамки
        graf[i]->MarginUnits = maPixels;
        graf[i]->MarginBottom = 1;
        graf[i]->MarginLeft = 0;
        graf[i]->MarginRight = 1;
        graf[i]->MarginTop = 1;
        //Выкл
        graf[i]->Axes->Right->Visible = false;
        graf[i]->Axes->Top->Visible = false;
        // Настройка серии
        SeriesX[i]->Color = 0x00ff00;
        SeriesX[i]->FillSampleValues(20);
        SeriesX[i]->Pointer->Visible = true;//Точки на кривой
        SeriesX[i]->Pointer->Size = 2;
        SeriesX[i]->Pointer->Style = psCircle;
        SeriesX[i]->Pointer->Color = 0x00ff00;
    }
2)Трек бар
C++
1
2
3
4
5
6
7
8
9
10
11
12
display_speed_parameters_TB = new TTrackBar(main_Form);
display_speed_parameters_TB->Parent = setting_panel;
display_speed_parameters_TB->OnChange =display_speed_parameters_TBChange;
display_speed_parameters_TB->Top = 9;
display_speed_parameters_TB->Left = 296;
display_speed_parameters_TB->Height = 32;
display_speed_parameters_TB->Width = 100;
display_speed_parameters_TB->Max = 70;
display_speed_parameters_TB->Min = 10;
display_speed_parameters_TB->Frequency = 10;
display_speed_parameters_TB->Position = 20;
display_speed_parameters_TB->Visible = false;
3)Обработка события display_speed_parameters_TBChange
C++
1
2
3
4
5
6
7
8
void __fastcall Tmain_Form::display_speed_parameters_TBChange(TObject *Sender){
 
       unsigned char i;
       namber_point_graf = display_speed_parameters_TB->Position; //namber_point_graf - глобальная
       for(i = 0; i < MAX_PARAM_GRAF; i++){
              SeriesX[i]->FillSampleValues(vaz_namber_point_graf);
       }
}
4) Может и не важно...построение кривой
C++
1
2
3
4
last_ = graf[i]->Series[0]->XValues->First() - 1;
graf[i]->Series[0]->Delete(namber_point_graf - 1);
graf[i]->Series[0]->AddXY(last_ ,fParameters[i]);
// все в цикле for(){}
Итог:
Изначально поставленная задача была выполнена, НО...все данные на графике при изменение параметра display_speed_parameters_TB->Position исчезают и построение кривой начинаются заново.
Предположу что это происходит из-за вот этой функции:SeriesX[i]->FillSampleValues(vaz_namber_point_graf) ;
и похоже ошибка в неправильной реализации построения и изменения графика.

Прошу помочь разрешить данную проблему.
Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2014, 15:19
Ответы с готовыми решениями:

TChart - Управление параметрами точек на графике
Использую стандартный TChart, работаю в XE6. Графики добавляю динамически:TChartSeries *NewSeries = new TLineSeries(Chart);Все прекрасно...

Динамическое создание Series TChart , изменение типа графика - C++ Builder
Здравствуйте, хотел спросить не мог бы кто объяснить мне как создавать динамическое количество series и как менять тип графика у Series (то...

Создание собственного VCL компонента. Динамическое изменение количества колонок в зависимости от размера объекта
Доброго времени суток всем. Решил при создании своего компонента на основе TStringGrid инкапсулировать в него ряд свойств. Хочется...

2
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.10.2014, 23:08
procedure FillSampleValues(NumValues: Integer); dynamic;

Description
Each Series draws random values at design mode unless you connect the Series component to other Series component or to a DataSet (Table,SQL,TClientDataset) component.

This method adds some random values to the Series and redraws it.
Обычно этот метод используется для преаллокации памяти под очень большие количества точек, для ускорения процесса. Зачем его используешь ты?

И по этим обрывкам кода неясно, как именно изменяется количество точек и перезаполняются серии. Гадать даже и не хочется...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
10.10.2014, 23:14
Мало того, исходники показывают, что FillSampleValues очищает серию, и только потом добавляет определенное количество точек, так что описанное в первом посте поведение - by design...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2014, 23:14
Помогаю со студенческими работами здесь

Разрыв на графике TChart
Как сделать разрыв на графике Tchar?

Изменение точек на графике
Здравствуйте. Подскажите, если я с помощью plot вывел на экран 2 точки, могу я как-то потом отдельно обращаться к каждой из точек (чтобы...

Изменение положения точек на графике при увеличении интенсивности световой волны
Помогите пожалуйста с задачкой, если не сложно поподробнее)Заранее спасибо))

Динамическое изменение количества панелей
Доброго утра всем спецам по WPF. Прошу подкинуть мысли по решению следующей проблемы: Имеется MainWindow, в котором содержится...

Динамическое изменение количества полей в форме
Трабла такая: Перекрестный запрос надо прикрутить к форме, но в этом запросе может быть разное количество полей. Как такое можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru