в Form1:

case Action of

TTouchAction.Down: begin

Path.MoveTo (Touches [0].Location);

end;

TTouchAction.Move: begin

Path.LineTo (Touches [High (Touches)].Location);

FormPaint(Sender,Form1.Canvas,Form1.ClientRect);

end;

Очистить холст можно методами:

Canvas.Clear (const AColor: TAlphaColor = 0)

или только область:

Canvas.Clear (const ARectF; const AColor: TAlphaColor = 0).

Для прорисовки на поверхности холста графической фигуры существует метод DrawBitmap (константы: ABitmap: TBitmap; SrcRect и Dstrect: TRectF: AOpasity: Single; HighSpeed: Boolean = false): выводится все изображение или его часть (SrcRect в область DstRect). Загружать образ фигуры можно из файла:

var ABitmap:= TBitmap.CreateFromFile («Путь и Имя файла»);


для выводарисунка:

if BeginScene then

begin

DrawBitmap (ABitmap,1,true);

EndScene;

end;


Сохранить настройки холста можно функцией:

SaveState: TCanvasSaveState;

Восстановить:

RestoreState (SaveState: TCanvasSaveState).


Сохранить и загрузить рисунок в Bitmap можно из Object Inspector или программно:

ABitmap. LoadFromFile ();

ABitmap.SaveToFile ();

ABitmap.SaveToStrem ().


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

var Form1: TForm1; Path: TPathData;

При открытии на OnCreate в Form1 создаем траекторию:

Path:=TpathData.Create;

Подготавливаем сцену для визуализаци в OnPaint и Form1:

with Canvas do

if (Edit1.Text = «1») and (BeginScene) then

try

Stroke.Kind:=TBrushKind.Solid;

Stroke.Color:=TAlphaColors. Blue;

Stroke.Thickness:=2;

DrawPath (Path,1);

finally

endScene;

end;

Начало рисования ограничиваем Edit1.Text = «1», который контролируем Button.

Для рисования используем свойство OnPaint для Button:

procedure TForm1.Button3Paint (Sender: TObject; Canvas: TCanvas;

const ARect: TRectF);

var

P: TPointF;

i: Integer;

begin

P.X:= 0;

P.Y:= StrToInt(Memo1.Lines [0]);

Path.MoveTo (P);

for i:= 0 to Memo1.Lines.Count – 2 do

begin

P.X:= i*4;

P.Y:= PlotGrid1.Height – StrToInt(Memo1.Lines [i]);

Path.LineTo (P);

end;

end;

Результат можно видеть на рисунке: накапливаемые данные тут же отражаются на графике (перерисовывается график для данных в Memo пока Edit1.Text = «1»).


Рис. 33. Рисование графика компонентом Path: TPathData.


Все же, гораздо удобнее и проще использовать для вывода данных на график специальный компонент, для этого предназначенный: Chart.

11.5. Компонент построения графиков Chart

В Delphi Android имеются специальный компонент для построения графиков – Chart. В компоненте Chart многие десятки свойств и функций, но работать достаточно с несколькими. Нажимаем щелчком мыши по компоненту Chart и переходим во вкладку Series, выбираем кнопку Add: открывается список всех доступных графиков, выбираем, например, первый тип графика (линейный) – Line.

Здесь же видны другие первостепенные свойства Chart:

– Общие; – Оси, – Заглавия, – Легенды и пр.

Внутри группы открываются их подробные настройки, которые можно делать также из ObjectInspector и программно.

Основная функция графика – добавление данных:

AddXY (AXValue, AYValue: Double; ALabel: String; AColor: TColor);

Chart1.Series[1].AddXY (x,y,» ',TAlphaColors.Red); //Например

Найти значение Y по X (от 0 до Х макс. видимого графика):

Y:= Chart1.Series [0].YValue [X]; или: Y:= Series1.YValue [X].

Следует учитывать, что: Series1 равна Chart1.Series [0].

Chart1.SaveToBitmapFile(FileName.jpg); //Сохранить график в файл

Series1.Delete (X); //Удалить точку X графика.

Series1.MaxYValue и *.MinYValue; // Y Max и Min видимого графика