реклама
Бургер менюБургер меню

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

18

Создаем глобальную переменную:

var

Form1: TForm1;

Path: TPathData;

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

Path:=TpathData.Create;

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

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 в 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;

В итоге движение пальца рисует синию линию (полилиния – Path).

Для изменения цвета и размера линии нужно ввести компоненты SpinBox и ColorListBox (обеспечивает выбор до 200 цветов), поместив их на Panel. Также нам понадобится Button для стирания рисунка:

Path.Clear; // Очистка компонента – полилиния (Path)

Path:=TpathData.Create; // Создание заново компонента Path

SpinBox1.Value:= 2; // Исходное значение величины кисти

ColorListBox1.Color:= TAlphaColors. Black; //Исходный цвет – черный

Важно: OnTouch реагирует на любое прикосновение к экрану, и чтобы рисунок не выводился на области Panel с компонентами настройки, ограничиваем выведение рисунка областью выше Panel:

if Touches [0].Location. Y <Panel1.Position. Y then

begin

case Action of

TTouchAction.Down: begin……………..

Для перехода в область настройки достаточно коснуться этой области внизу экрана (осторожно, чтобы не закрыть все приложение основными кнопками смартфона «>» и «O»), при этом исчезает рисунок и снова появляется при переходе в область рисивания. Однако, изменение цвета изменяет и цвет всех предыдущих линий, которые все перерисовываются заново с новыми установками цвета и размера линий.

Для того, чтобы рисовать другую линию, нужно ввести новый компонент Path1 (что вполне логично). Также нужно ввести понятие «сессии» и внести на Форму компонент Button для перехода к новой сессии и NumberBox для счета и отображения номера очередной сессии. Теперь на новую сессию рисуется новая линия с новыми настройками:

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;