Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95

Сохранить загрузить в TChart (Series)

15.06.2011, 21:42. Показов 3762. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Есть код
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
68
69
70
71
72
73
74
75
76
77
78
79
80
void __fastcall TForm1::Button1Click(TObject *Sender)
{
D=StrToFloat(Edit1->Text);
  m=StrToFloat(Edit2->Text)*1000;
  E=StrToFloat(Edit3->Text)+pow(10,StrToFloat(Edit4->Text));
 
 
  double I;
  double g=9.8;
  I=M_PI*pow(D,4)/64;
  B=E*I;
  F=m*g;
 
  double a1;
  a1=StrToFloat(Edit5->Text);
  L=D;
  double Fp,Fc,dE,x,l;
 
 
 
  float h=1;
 
  Form4->Series1->Clear();
  Form4->Series2->Clear();
  Form4->Series3->Clear();
  Form4->Series4->Clear();
  Form4->Series5->Clear();
  Form4->Series6->Clear();
  Form4->Series7->Clear();
  Form4->Series8->Clear();
  Form4->Series9->Clear();
  Form4->Series10->Clear();
 
  l=L;
  x=0;
  while(x<L)
  {
    F=4*m*g;
    Fp=3*B*l*a1*pow((M_PI/l),4)/2;
    dE=(Fp-F)*x*x/2-pow(x,4)/4;
    Fc=Fp-2*pow(abs(dE),0.5);
    Form4->Series1->AddXY(x,abs(dE),"",clRed);
    Form4->Series6->AddXY(x,Fc,"",clRed);
 
    F=F*3;
 
    Fp=3*B*l*a1*pow((M_PI/l),4)/2;
    dE=(Fp-F)*x*x/2-pow(x,4)/4;
    Fc=Fp-2*pow(abs(dE),0.5);
    Form4->Series2->AddXY(x,abs(dE),"",clGreen);
    Form4->Series7->AddXY(x,Fc,"",clGreen);
 
    F=2*F;
 
    Fp=3*B*l*a1*pow((M_PI/l),4)/2;
    dE=(Fp-F)*x*x/2-pow(x,4)/4;
    Fc=Fp-2*pow(abs(dE),0.5);
    Form4->Series3->AddXY(x,abs(dE),"",clBlue);
    Form4->Series8->AddXY(x,Fc,"",clBlue);
 
    F=1.5*F;
 
    Fp=3*B*l*a1*pow((M_PI/l),4)/2;
    dE=(Fp-F)*x*x/2-pow(x,4)/4;
    Fc=Fp-2*pow(abs(dE),0.5);
    Form4->Series4->AddXY(x,abs(dE),"",clWhite);
    Form4->Series9->AddXY(x,Fc,"",clWhite);
 
    F=1*F;
 
    Fp=3*B*l*a1*pow((M_PI/l),4)/2;
    dE=(Fp-F)*x*x/2-pow(x,4)/4;
    Fc=Fp-2*pow(abs(dE),0.5);
    Form4->Series5->AddXY(x,abs(dE),"",clYellow);
    Form4->Series10->AddXY(x,Fc,"",clYellow);
   
    x=x+h;
  }
  Edit12->Text=FloatToStr(Fp);
}

Подскажите, пожалуйста, как можно сохранить уже построенный график в .тхт и из сохраненного ранее, подобного .тхт, загрузить в график, т.е. построить по данным из .тхт график??
Если не затруднит, покажите пример. На форуме нашел тему https://www.cyberforum.ru/cpp-... 48743.html но она не раскрывает достаточно информации.

Добавлено через 2 часа 8 минут
В общем выкрутился я таким вот образом: когда в эдиты ввели данные и нажали на кнопу расчета, в этот момент запоминаем данные в мэмо, их то я и сохраняю в .тхт
При загрузке открываем этот же .тхт, загружаем в эдиты данные и жмем бутон расчета
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Memo3->Clear(); //Memo3 Буфер для Memo1 + Memo2
   if  (OpenDialog1->Execute())
   Memo3->Lines->LoadFromFile(OpenDialog1->FileName);
 
   Edit1->Text=Memo3->Lines->Strings[0];
   Edit2->Text=Memo3->Lines->Strings[1];
   Edit3->Text=Memo3->Lines->Strings[2];
   Edit4->Text=Memo3->Lines->Strings[3];
   Edit5->Text=Memo3->Lines->Strings[4];
 
   Edit6->Text=Memo3->Lines->Strings[7];
   Edit7->Text=Memo3->Lines->Strings[8];
   Edit8->Text=Memo3->Lines->Strings[9];
   Edit9->Text=Memo3->Lines->Strings[10];
   Edit10->Text=Memo3->Lines->Strings[11];
   Edit11->Text=Memo3->Lines->Strings[12];
  // Button1->Click();
  // Button2->Click();
Содержание .тхт файла (где каждая строка отдельный эдит):
4
4
440
2
10
0,0000001

5
450
2
10
0,0000001
8


Проблема вот в чем
При добавлении из мемо в эдит(когда загружаем)
числа 0,0000001 не правильно записываются. Получается вод такая белиберда
0,0000
001

В Edit5 и Edit10 записывается 0,0000

В Edit11 001
Сдвиг какойто, одна строка записывается в разные эдиты.
Что посоветуете?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2011, 21:42
Ответы с готовыми решениями:

TChart и Series
Не могу никак реализовать добавление новой серии программой, допустим, надо построить сколько-то графиков функции, но количество график...

Удалить конкретные Series из TChart
Добрый день, форумчане! Прошу помочь в следующем вопросе: мне нужно, чтобы при достижении определенного лимита количества Series на графике...

Динамическое создание Series TChart
TChart *Chart1 = new TChart (FMyForm); TChartSeries *LineSeries = new TChartSeries(Chart1); //Oncreate Chart1-&gt;Parent=FMyForm; ...

8
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
15.06.2011, 22:09
JUK, пробовали ini файл?
1
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
15.06.2011, 22:19  [ТС]
ини не пробовал, т.к маловато опыта

Если проблема решима через ини, подскажите как?
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
15.06.2011, 23:35
JUK, во вложение скомпилированный проэкт.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//---------------------------------------------------------------------------
 
#include <vcl.h>
  // Подключаем библиотеку для работы с ini файлами
#include <inifiles.hpp>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
  // Тут храним цифры
        TIniFile *db;
  // Это вспомогательная таблица
        TStringList *Sections;
  // Путь к программе
        AnsiString Path = ExtractFilePath(Application->ExeName);
  // Имя файла базы
        AnsiString File = "db";
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // Очищаем ListBox
        ListBox1->Clear();
  // Читаем заголовки  с базы
        db->ReadSections(Sections);
  // Заполняем ListBox
        for (int i = 0; i < Sections->Count; i++)
        {
                ListBox1->Items->Add(Sections->Strings[i]);
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
  // Читаем цифорки... Можно db->ReadInteger если точно цифры
        Edit1->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"q",NULL);
 
        Edit2->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"w",NULL);
 
        Edit3->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"e",NULL);
 
        Edit4->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"r",NULL);
 
        Edit5->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"t",NULL);
 
        Edit6->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex],"y",NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
  // Записываем данные
        db->WriteString(Edit7->Text,"q", Edit1->Text);
 
        db->WriteString(Edit7->Text,"w", Edit2->Text);
 
        db->WriteString(Edit7->Text,"e", Edit3->Text);
 
        db->WriteString(Edit7->Text,"r", Edit4->Text);
 
        db->WriteString(Edit7->Text,"t", Edit5->Text);
 
        db->WriteString(Edit7->Text,"y", Edit6->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // Выделяем память
        db = new TIniFile(Path + File);
 
        Sections = new TStringList();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  // Освобождаем память
        delete db;
 
        delete Sections;
}
//---------------------------------------------------------------------------
Вложения
Тип файла: zip ini.zip (372.1 Кб, 26 просмотров)
1
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
15.06.2011, 23:51  [ТС]
Приогромнейше благодарю! Почерпнул ценную информацию =)
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
16.06.2011, 00:16
JUK, если Edit-ов много то проще их циклом заполнять.

C++
1
2
3
4
5
for (int i = 0; i < this->ComponentCount; i++)
{
            if (this->Components[i]->ClassNameIs("TEdit"))
                    ((TEdit*) this->Components[i])->Text = db->ReadString(ListBox1->Items->Strings[ListBox1->ItemIndex], "Edit" + IntToStr(i + 1), NULL);
}
И сохранять так же:

C++
1
2
3
4
5
for (int i = 0; i < this->ComponentCount; i++)
{
            if (this->Components[i]->ClassNameIs("TEdit"))
                    db->WriteString(SeriesName->Text, "Edit" + IntToStr(i + 1), (TEdit*) this->Components[i])->Text);
}
1
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
16.06.2011, 19:22  [ТС]
=) где же Вы раньше были )) я вот тут Table and Edit все никак не мог получить ответа, а Вы мне дали его здесь ))) Благодарю за ценную информацию.

Добавлено через 3 минуты
Да, кстати, как можно удалить из ini определенный (скажем выделеннный) из того списка граф?
В принципе можно перезаписывать, но для общего развития не помешало бы знать
0
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
16.06.2011, 19:31
JUK, удаление с ini и ListBox:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        // Удаляем выбранную секцию в ListBox из базы
  db->EraseSection(ListBox1->Items->Strings[ListBox1->ItemIndex]);
        // Удаляем запись из ListBox
  ListBox1->Items->Delete(ListBox1->ItemIndex);
}
//---------------------------------------------------------------------------
1
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
17.06.2011, 02:47  [ТС]
Благодарю за информацию.

Нарисовался еще один трабл. По поводу графиков, а именно Series.

Как так сделать, чтобы в уже построенном графике (Series1) можно было изменить один показатель прямоугольника, а именно его цвет?
Граф строю вида Horizont Bar. Там получается прямоугольники.
Допустим получили из эдитов данные и построили граф, сравнили данные с эталоном каким-то и при разнице изменили цвет, только уже построенного графа. Как во время создания графа менять цвет я знаю, а вот изменить созданный(какбы перерисовать один прямоугольник), что-то сообразить не могу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2011, 02:47
Помогаю со студенческими работами здесь

TChart вывести series на задний план
Здравствуйте проблема вот в чем: 1) в компоненте TChart динамически создаю серию типа TBarSeries (по сути не важно какую) 2) далее...

Артефакты при отображении двух Series в TChart
Вопрос: Есть на форме компонент TChart, В нем создано 2 Series'a. Series1: for (int i=0;i&lt;1024;i++)...

TChart Series Point много кушает ресурса процессора
Столкнулся с проблемой, а которой раньше и не задумывался. Быть может кто-то знает решение и сможет дать совет. Раньше постоянно работал с...

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

Несколько динамически созданных Series в TChart создаются одного цвета
Создаю динамически несколько Series типа TBar. Почему то они все становятся одинакового цвета, хотя у меня есть массив цветов.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru