Программирование для Android и работа с датчиками в среде Delphi 11 - страница 36

Шрифт
Интервал


with Form1.Canvas do

begin

ABitmap:= TBitmap.Create;

aWidth:= ABitmap. Width;

aHeight:= ABitmap. Height;

SrcRect:= RectF (0,0,aWidth, aHeight);

DstRect:= SrcRect;

if BeginScene then

begin

DrawBitmap (ABitmap, SrcRect, DstRect,1,true);

EndScene;

end;

end; end;

Изображение ABitmap полностью или его части представлено SrcRect, место вывода и размеры – в параметре DstRect.

Параметр HighSpeed позволяет предпочтение скорости (true) или качеству (false) вывода.

Фрагмент исходного рисунка, можно ограничить в SrcRect. Управляя размерами области DstRect, можем увеличить или уменьшить рисунок.

Метод Paint: PaintTo (const ACanvas: TCanvas; const ARect: TRectF; const AParent: TFmxObject = nil); пример: рисуем увеличенную в 2 раза кнопку:

Form1.Canvas.BeginScene;

Button1.PaintTo(Form1.Canvas, RectF (0,0,Button1.Width* 2,Button1. Height*2));

Form1.Canvas. EndScene;


Надо отметить, что если в событии OnPaint Формы все рисуется прекрасно, то при попытке сделать это же при нажатии кнопки можно получить что угодно, а обычно ничего, или кратковременный вывод рисунка на экран, который тут же исчезает. Чтобы получить устойчивую фигуру нужно сделать довольно много, в отличие от обычного Delphi 7. На примере компонента Path, позволяющего рисовать полилинии:

Вначале определяется глобальная переменная Path:

var

Form1: TForm1;

Path: TPathData;

Затем при открытии формы создается траектория Path:

procedure TForm1.FormCreate (Sender: TObject);

begin

Path:= TPathData.Create; //Создаем траекторию

end;


Определяется событие OnPaint для Image (или для Form1):

procedure TForm1.Image1Paint (Sender: TObject; Canvas: TCanvas; const ARect: TRectF);

begin

with Canvas do

if (Path.Count> 0) and (BeginScene) then

try

Clear (TAlphaColorRec. White);

Stroke.Kind:= TBrushKind.Solid;

Stroke.Thickness:= 1;

DrawPath (Path,1); //Рисовать Path при обращении

finally

EndScene;

end;


Собственно рисуем линию на Image по щелчку на кнопке:

procedure TForm1.Button1Click (Sender: TObject);

var

p,p1:TPointF;

begin

p.X:= Image1.Position. X;

p.Y:= Image1.Position. Y;

Path.Clear; // Очистить Path

Path.MoveTo (p1); // Начальная точка рисования

p1.X:= Image1.Position. X+100;

p1.Y:= Image1.Position. Y+150;

Path.LineTo (p1); // Линия от начальной точки

Path.ClosePath; // Оконачание создания Path

// Вывод созданной Path в Image

Image1.OnPaint(Sender,Image1.Canvas,Image1.ClipRect);