![]() |
|
|
#1
|
|||
|
|||
|
есть график нужно его сохранить (все точки) в файл и потом на событие открытия файла - его считать(нарисовать)
|
|
#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
|