Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.02.2010, 10:54
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
Вопрос Chart Save/Load

есть график нужно его сохранить (все точки) в файл и потом на событие открытия файла - его считать(нарисовать)
Ответить с цитированием
  #2  
Старый 11.02.2010, 15:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Создаешь тип данных, описавающий точку графика.
2. Заводишь массив или список для хранения точек
3. Пишешь данные в типизированный файл (File Of TMyType)
4. читаешь данные из типизированного файла.
Ответить с цитированием
  #3  
Старый 11.02.2010, 16:16
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
По умолчанию

на данный момент я записываю график в тектовый файл WriteLn(x+TAB+y);
Получаю файл, где в первой колонке Х, а во второй У. В конце пишу "ЭНД".

Как читать его правильно?


Цитата:
1. Создаешь тип данных, описавающий точку графика.
Это пока трудно для меня
Ответить с цитированием
  #4  
Старый 11.02.2010, 17:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
на данный момент я записываю график в тектовый файл WriteLn(x+TAB+y);

Если в файле кроме координат графика ничего не предполагается хранить, то лучше конечно сделать типизированный файл и с ним работать. Примерно так:
Код:
Var
    P: TPoint; Специальный тип в котором есть X,Y
    PFile: File of TPoint; 
begin 
 AssignFile(PFile, 'c:\file.xy');
 // Запись в файл координат
 Rewrite(PFile); //Создаем файл
 for i := 1 to 10
 do begin
     P.X := Sin(i); // Определяем какие-то координаты для X
     P.Y := Cos(i); // Определяем какие-то координаты для Y
     Write(PFile, P); // Записываем в файл 10 координат.
     end;
 CloseFile(PFile);
...
 //Чтение из файла координат
 Reset(PFile); // Открываем файл
 while not eof(PFile)
 do begin
     Read(PFile,P); //Получаем координаты из файла
     ... //Здесь по логике нужно рисовать на графике полученную точку  
     end;
 CloseFile(PFile);
end;  
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 11.02.2010, 20:11
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Я думаю что те не координаты точек нужны будут, а значения к примеру значения Y при последовательных значениях X.
Код:
...
var  CooX, CooY: array of real;
...
procedure TForm1.SaveGraph(FileName: string);
 var Ch: Byte;
     F: File of real;
     i: integer;
     XX: real;
begin
 AssignFile(F, FileName);
 {+I}
 Rewrite(F);
 {-I}
 {Записываем строку графика - формулу}
 XX:= Length(FormulEd.Text);
 Write(F, XX);
 for i:= 1 to Length(FormulEd.Text) do
  begin
   Ch:= Byte(FormulEd.Text[i]);
   XX:= Integer(Ch);
   Write(F, XX);
  end;
 {точка начала графика}
 XX:= StrToFloat(FromXEd.Text);
 Write(F, XX);
 {точка конца графика}
 XX:= StrToFloat(ToXEd.Text);
 Write(F, XX);
 {шаг изменения переменно X}
 XX:= StrToFloat(dXEd.Text);
 Write(F, XX);
{записываем значения X}
 for i := 0 to High(CooX) do
  Write(F, CooX[i]);
{Записываем значения Y при X}
 for i := 0 to High(CooY) do
  Write(F, CooY[i]);
 CloseFile(F);
end;

procedure TForm1.LoadGraph(Displ: TCanvas; FileName: string);
 var Ch: Byte;
     F: File of real;
     i: integer;
     XX: real;
     s: Char;
begin
 AssignFile(F, FileName);
 {+I}
 Reset(F);
 {-I}

{Читаем строку графика - формулу} 
FormulEd.Text:= '';
 Read(F, XX);
 Ch:= Round(XX);
 for i:= 1 to Ch do
  begin
   Read(F, XX);
   s:= Char(Round(XX));
   FormulEd.Text:= FormulEd.Text + s;
  end;
 Read(F, XX);
 FromXEd.Text:= FloatToStr(XX);
 Read(F, XX);
 ToXEd.Text:= FloatToStr(XX);
 Read(F, XX);
 dXEd.Text:= FloatToStr(XX);

 i:= Trunc((StrToFloat(ToXEd.Text) - StrToFloat(FromXEd.Text))
           / StrToFloat(dXEd.Text)) + 1;
 SetLength(CooX, i);
 SetLength(CooY, i);
 for i := 0 to High(CooX) do
  Read(F, CooX[i]);
 for i := 0 to High(CooY) do
  Read(F, CooY[i]);
 CloseFile(F);
end;
Ответить с цитированием
  #6  
Старый 12.02.2010, 09:37
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
Радость

Вот делаю так. Нужны не координаты ни формулы. Значения идут по опросу двух таймеров. 1-й - значение силы 2-й время.

Код:
// процедура подключения к датчику силы
... 

      //file
      FileName:= 'c:\testgraf.txt';
      AssignFile(F, 'c:\testgraf.txt');  // связали файл с переменной
      Rewrite(F);                             // создаем пустой файл
         WriteLn(F,
        'время' + TAB + 'Усилие');    // ТАВ - #14
        WriteLn(F,'');
...

procedure TForm1.Timer1Timer(Sender: TObject); //таймер по которому опрашиваю датчик силы
begin
  if Run <> false then
    begin

    sP1.Caption:= FloatToStrF(dOPCServer1.OPCGroups[0].OPCItems[1].Value,ffFixed, 8, nuli); // Лэйбл показывающий усилие
    newton:= dOPCServer1.OPCGroups[0].OPCItems[1].Value;				    // переменная считавшая значение силы с датчика			


// массивы Х и У  заполняем
    grafikX[x]:=time*0.5;   //опрос 2 Гц	// time - тянет инкрементацию с 2-го таймера с опросом в 500		
    grafikY[y]:=newton;     //усилие
   if grafikX[x]=grafikX[x-1] then begin //проверка уникальности данных массива (неповторяемости)
     x:=x-1;
     y:=y-1;
     grafikX[x]:=time*0.5;
     grafikY[y]:=newton;
   end
   else begin                   //уникально - значит пишем в файл
      WriteLn(F,
        FloatToStr(grafikX[x]) + TAB +
        FloatToStr(grafikY[y]));
        series1.AddXY(grafikX[x],grafikY[y],'',clRed);

    end;
      inc(x); // индексы массивов
      inc(y);
    end;
end;


как потом открыть файл??? притом планирую дописывать в него еще Дату, расчеты проведенные после рисования графика и + добавлю еще 2 графика.

Надеюсь что поможете с одним графиком - я потом по тому же принципу сделаю дополнения .
Ответить с цитированием
  #7  
Старый 12.02.2010, 20:23
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Я не могу понять в чем проблема. Если ты можешь записать в файл, то "обратним" способом и считывай. Тока единственное это то что если ты собыраешься записывать в файл данные разных типов, то приведи их к одному типу и все получится.
Код:
....
FileName:= 'c:\testgraf.txt';
      AssignFile(F, FileName);
      Reset(f);
      Read(f, {переменная});
      Close(f);
....
Ответить с цитированием
  #8  
Старый 14.02.2010, 00:04
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от AntoNechayuk
есть график нужно его сохранить (все точки) в файл и потом на событие открытия файла - его считать(нарисовать)
Компонент TChart работает с базами данных. Т.е. ваш график уже хранится в этой базе. Т.е. командами общения с базой данных вы можете редактировать данные, а TChart всегда нарисует график.
Ответить с цитированием
  #9  
Старый 15.02.2010, 12:19
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
По умолчанию

используется обычный Chart/Additional
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter