6 System.SysUtils, System.Types, System.UITypes, System.Classes,
8 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
9 FMX.Objects, FMX.Gestures;
15 SpeedButton1: TSpeedButton;
16 OpenDialog1: TOpenDialog;
17 SpeedButton2: TSpeedButton;
18 procedure Image1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo;
19 var Handled: Boolean);
20 procedure Image1Paint(Sender: TObject; Canvas: TCanvas;
22 procedure Image1Tap(Sender: TObject; const Point: TPointF);
23 procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
24 Shift: TShiftState; X, Y: Single);
25 procedure SpeedButton1Click(Sender: TObject);
31 dot1, dot2, pan: TPointF;
43 procedure TForm1.Image1Gesture(Sender: TObject;
44 const EventInfo: TGestureEventInfo; var Handled: Boolean);
48 case EventInfo.GestureID of
51 SpeedButton1Click(Sender);
59 i := (Distance - dis) * cos(ang) / 2;
60 j := (Distance - dis) * sin(ang) / 2;
62 if Flags = [TInteractiveGestureFlag.gfBegin] then
64 ang := arctan((Location.Y - TapLocation.Y) /
65 (Location.X - TapLocation.X));
69 if dot1.X < dot2.X then
79 if dot1.Y < dot2.Y then
93 i := EventInfo.Location.X - pan.X;
94 j := EventInfo.Location.Y - pan.Y;
95 pan := EventInfo.Location;
96 if EventInfo.Flags = [TInteractiveGestureFlag.gfBegin] then
100 dot1.Y := dot1.Y + j;
101 dot2.Y := dot2.Y + j;
107 procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
108 Shift: TShiftState; X, Y: Single);
110 // Image1Tap(Sender, PointF(X, Y));
113 procedure TForm1.Image1Paint(Sender: TObject; Canvas: TCanvas;
114 const ARect: TRectF);
118 Image1.Canvas.FillEllipse(RectF(dot1.X - 5, dot1.Y - 5, dot1.X + 5,
121 Image1.Canvas.FillRect(RectF(dot1.X, dot1.Y, dot2.X, dot2.Y), 0,
126 procedure TForm1.Image1Tap(Sender: TObject; const Point: TPointF);
136 i := dot1.X - dot2.X;
137 j := dot1.Y - dot2.Y;
138 if (i < 20) and (i > -20) and (j < 20) and (j > -20) then
144 SpeedButton2.Enabled := true;
148 SpeedButton2.Enabled := false;
155 procedure TForm1.SpeedButton1Click(Sender: TObject);