Download project source here: selectionrect
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Panel1MouseLeave(Sender: TObject); private Drawing: boolean; AnchorX: single; AnchorY: single; TargetX: single; TargetY: single; procedure Invalidate; public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Drawing := True; AnchorX := X; AnchorY := Y; end; procedure TForm1.Invalidate; begin Panel1.InvalidateRect(Panel1.ClipRect); end; procedure TForm1.Panel1MouseLeave(Sender: TObject); begin if Drawing then begin Drawing := False; Invalidate; end; end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); var myRect : TRectF; thePoints: TPointF; begin if not Drawing then begin exit; end; TargetX := X; TargetY := Y; Invalidate; end; procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Drawing := False; Invalidate; end; procedure TForm1.Panel1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var RenderRect: TRectF; begin if not Drawing then begin exit; end; RenderRect.TopLeft := Panel1.LocalToAbsolute(PointF(AnchorX,AnchorY)); RenderRect.BottomRight := Panel1.LocalToAbsolute(PointF(TargetX,TargetY)); RenderRect.TopLeft := PointF(AnchorX,AnchorY); RenderRect.BottomRight := PointF(TargetX,TargetY); panel1.Canvas.BeginScene(); panel1.Canvas.DrawDashRect(RenderRect,0,0,allcorners,1,talphacolors.Black); panel1.Canvas.EndScene; end; end.