|
#1
|
|||
|
|||
Chart Save/Load
есть график нужно его сохранить (все точки) в файл и потом на событие открытия файла - его считать(нарисовать)
|
#2
|
|||
|
|||
1. Создаешь тип данных, описавающий точку графика.
2. Заводишь массив или список для хранения точек 3. Пишешь данные в типизированный файл (File Of TMyType) 4. читаешь данные из типизированного файла. |
#3
|
|||
|
|||
на данный момент я записываю график в тектовый файл WriteLn(x+TAB+y);
Получаю файл, где в первой колонке Х, а во второй У. В конце пишу "ЭНД". Как читать его правильно? Цитата:
|
#4
|
||||
|
||||
Цитата:
Если в файле кроме координат графика ничего не предполагается хранить, то лучше конечно сделать типизированный файл и с ним работать. Примерно так: Код:
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
|
|||
|
|||
Я думаю что те не координаты точек нужны будут, а значения к примеру значения 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
|
|||
|
|||
Вот делаю так. Нужны не координаты ни формулы. Значения идут по опросу двух таймеров. 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
|
|||
|
|||
Я не могу понять в чем проблема. Если ты можешь записать в файл, то "обратним" способом и считывай. Тока единственное это то что если ты собыраешься записывать в файл данные разных типов, то приведи их к одному типу и все получится.
Код:
.... FileName:= 'c:\testgraf.txt'; AssignFile(F, FileName); Reset(f); Read(f, {переменная}); Close(f); .... |
#8
|
|||
|
|||
Цитата:
|
#9
|
|||
|
|||
используется обычный Chart/Additional
|