Виталий Донцов – Программирование для Android и работа с датчиками в среде Delphi 11 (страница 19)
Создаем глобальную переменную:
var
Form1: TForm1;
Path: TPathData;
При открытии на OnCreate в
Path:=TpathData.Create;
Подготавливаем сцену для визуализаци в OnPaint и
with Canvas do
if (Path.Count> 0) and (BeginScene) then
try
Stroke.Kind:=TBrushKind.Solid;
Stroke.Color:=TAlphaColors. Blue;
Stroke.Thickness:=2;
DrawPath (Path,1);
finally
endScene;
end;
Формируем событие OnTouch в
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;
В итоге движение пальца рисует синию линию (полилиния –
Для изменения цвета и размера линии нужно ввести компоненты
Path.Clear; // Очистка компонента – полилиния (Path)
Path:=TpathData.Create; // Создание заново компонента Path
SpinBox1.Value:= 2; // Исходное значение величины кисти
ColorListBox1.Color:= TAlphaColors. Black; //Исходный цвет – черный
Важно: OnTouch реагирует на любое прикосновение к экрану, и чтобы рисунок не выводился на области
if Touches [0].Location. Y <Panel1.Position. Y then
begin
case Action of
TTouchAction.Down: begin……………..
Для перехода в область настройки достаточно коснуться этой области внизу экрана (осторожно, чтобы не закрыть все приложение основными кнопками смартфона «>» и «O»), при этом исчезает рисунок и снова появляется при переходе в область рисивания. Однако, изменение цвета изменяет и цвет всех предыдущих линий, которые все перерисовываются заново с новыми установками цвета и размера линий.
Для того, чтобы рисовать другую линию, нужно ввести новый компонент
TTouchAction.Move: begin
if NumberBox1.Value = 1 then Path.LineTo (Touches [High (Touches)]. Location);
if NumberBox1.Value=2 then Path1.LineTo (Touches [High (Touches)]. Location);
Но теперь исчезли все предыдущие линии, что также понятно, так как каждый раз рисунок создается заново, и для того, чтобы были видны предудущие линии нужно, чтобы выводились на рисование ОБЕ линии:
with Canvas do
if (Path.Count> 0) and (BeginScene) then
try
Stroke.Kind:=TBrushKind.Solid;
if NumberBox1.Value = 1 then
begin
Stroke.Color:= TAlphaColors. Blue;
Stroke.Thickness:= 1;
DrawPath (Path,1);
end;
if NumberBox1.Value = 2 then
begin
Stroke.Color:= TAlphaColors. Blue;
Stroke.Thickness:= 1;
DrawPath (Path,1);
Stroke.Thickness:= 5;
Stroke.Color:= TAlphaColors.Red;
DrawPath (Path1,1);
end;
finally
endScene;
end;