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