Программирование для Android и работа с датчиками в среде Delphi 11. Виталий Иванович Донцов

Читать онлайн.
Название Программирование для Android и работа с датчиками в среде Delphi 11
Автор произведения Виталий Иванович Донцов
Жанр
Серия
Издательство
Год выпуска 0
isbn 9785006566965



Скачать книгу

Path: TPath, рисующий полилинию, а также компонент PlotGrid, представляющий собой просто сетку. Чтобы координата Y шла вверх (а отсчет Y ведется от левого верхнего угла вниз), и находилась в пределах PlotGrid, можно координату Y задавать как:

      y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – y;

      var

      p: TPointF;

      i: Integer;

      x,y,kX, kY, x1,x2,y1,y2:Double;

      s: String;

      begin

      //Коэффициенты Х и Y

      kX:= StrToFloat (Edit1.Text);

      kY:= StrToFloat (Edit2.Text);

      //Оси задаются

      x:= 1; // Ось Y

      y:= 1;

      p.X:= x;

      p.Y:= y;

      Path1.Data.MoveTo (p);

      x:= 1;

      y:= 360;

      p.X:= x;

      p.Y:= y;

      Path1.Data.LineTo (p);

      x:= 1; // Ось Х

      y:= 360;

      p.X:= x;

      p.Y:= y;

      Path1.Data.MoveTo (p);

      x:= 360;

      y:= 360;

      p.X:= x;

      p.Y:= y;

      Path1.Data.LineTo (p);

      //Проверка наличия данных

      if Memo1.Lines [0] = «» then

      begin

      ShowMessage («Введете данные X;Y!»);

      Exit;

      end;

      //График

      s:= Memo1.Lines [0];

      s:= Copy (s,1,Pos (» -», s) -1); // Выделение Х из строки

      x:= StrToFloat (s);

      s:= Memo1.Lines [0]; // Выделение Y из строки

      s:= Copy (s, Pos (» -», s) +1,100);

      y:= StrToFloat (s);

      x1:= kX*x; // Учет коэффициентов для данных

      y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – kY*y;

      p.X:= x1;

      p.Y:= y1;

      Path1.Data.MoveTo (p); //Начало графика

      //График

      for i:= 1 to Memo1.Lines.Count-1 do

      begin

      s:= Memo1.Lines [i];

      s:= Copy (s,1,Pos (» -», s) -1);

      x:= StrToFloat (s);

      s:= Memo1.Lines [i];

      s:= Copy (s, Pos (» -», s) +1,100);

      y:= StrToFloat (s);

      x1:= kX*x;

      y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – kY*y;

      p.X:= x1;

      p.Y:= y1;

      Path1.Data.LineTo (p); // Очередная линия графика

      end;

      Надо заметить, что компонент рисует график сразу, причем самостоятельно масштабирует его во всю свою длину и ширину, так что можно просто наложить по размеру компонент на PlotGrid. Повторные графики рисуются с сохранением предыдущих, причем большие графики изменяют масштаб предыдущих, а меньшие рисуются в пределах существующего.

      Рис. 30. Построение графиков с помощью компонента Path1 на фоне компонента PlotGrid.

      Ранее заданные оси координат (синия линии по Х оси) автоматически увеличены под новый график.

      «Стереть» линии можно просто с помощью Path1.Data.Clear.

      Чтобы график не выходил за заданные масштабы и компонент не навязывал свой масштаб, данные для графика должны быть в пределах координатных заданных осей X и Y. Для того, чтобы задать масштаб компоненту нужно нарисовать вначале линии координат. Вводить данные можно из Memo.

      Для масштабирования графика можно задать вводимый масштаб для данных через компоненты Edit:

      kX:= StrToFloat (Edit1.Text);

      kY:= StrToFloat (Edit2.Text);

      Компонент Path можно использовать и для вывода данных в реальном времени, когда работа с данными периодически дополняет график, для этого достаточно добавлять данные в Memo и использовать его свойство onChage для перерисовки графика (очищаем график с помощью Path1.Data.Clear и рисуем заново с новыми данными).

      Из простого графика можно получить полноценный