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;
44 procedure TForm1.Image1Gesture(Sender: TObject;
45 const EventInfo: TGestureEventInfo; var Handled: Boolean);
50 if dot1.X < dot2.X then
63 if dot1.Y < dot2.Y then
76 case EventInfo.GestureID of
79 SpeedButton1Click(Sender);
90 else if ang < pi / 3 then
92 else if ang < 2 * pi / 3 then
94 else if ang < 5 * pi / 6 then
104 i := (Distance - dis) * cos(Angle) / 2;
105 j := (Distance - dis) * sin(Angle) / 2;
111 ang := EventInfo.Angle;
128 i := EventInfo.Location.X - pan.X;
129 j := EventInfo.Location.Y - pan.Y;
130 pan := EventInfo.Location;
131 if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then
133 dot1.X := dot1.X + i;
134 dot2.X := dot2.X + i;
135 dot1.Y := dot1.Y + j;
136 dot2.Y := dot2.Y + j;
142 procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
143 Shift: TShiftState; X, Y: Single);
146 Image1Tap(Sender, PointF(X, Y));
150 procedure TForm1.Image1Paint(Sender: TObject; Canvas: TCanvas;
151 const ARect: TRectF);
157 with Image1.Canvas do
159 Fill.Color := TAlphaColors.Red;
160 FillEllipse(RectF(dot1.X - 5, dot1.Y - 5, dot1.X + 5, dot1.Y + 5), 1);
161 Fill.Color := TAlphaColors.White;
162 FillEllipse(RectF(dot1.X - 4, dot1.Y - 4, dot1.X + 4, dot1.Y + 4), 1);
165 with Image1.Canvas do
167 DrawLine(dot1, dot2, 1);
168 DrawLine(PointF(dot2.X, dot1.Y), PointF(dot1.X, dot2.Y), 1);
169 Fill.Color := TAlphaColors.White;
170 FillRect(RectF(dot1.X, dot1.Y, dot2.X, dot2.Y), 0, 0, [], 0.5);
171 Fill.Color := TAlphaColors.Green;
172 FillRect(RectF(dot1.X - 2, dot1.Y - 2, dot1.X + 2, dot1.Y + 2), 0,
174 FillRect(RectF(dot2.X - 2, dot1.Y - 2, dot2.X + 2, dot1.Y + 2), 0,
176 FillRect(RectF(dot1.X - 2, dot2.Y - 2, dot1.X + 2, dot2.Y + 2), 0,
178 FillRect(RectF(dot2.X - 2, dot2.Y - 2, dot2.X + 2, dot2.Y + 2), 0,
180 s := (dot1.X + dot2.X) / 2;
181 FillRect(RectF(s - 2, dot1.Y - 2, s + 2, dot1.Y + 2), 0, 0, [], 1);
182 FillRect(RectF(s - 2, dot2.Y - 2, s + 2, dot2.Y + 2), 0, 0, [], 1);
183 s := (dot1.Y + dot2.Y) / 2;
184 FillRect(RectF(dot1.X - 2, s - 2, dot1.X + 2, s + 2), 0, 0, [], 1);
185 FillRect(RectF(dot2.X - 2, s - 2, dot2.X + 2, s + 2), 0, 0, [], 1);
186 Fill.Color := TAlphaColors.Yellow;
190 s := (dot1.Y + dot2.Y) / 2;
191 FillRect(RectF(dot1.X - 2, s - 2, dot1.X + 2, s + 2), 0,
193 FillRect(RectF(dot2.X - 2, s - 2, dot2.X + 2, s + 2), 0,
198 FillRect(RectF(dot1.X - 2, dot1.Y - 2, dot1.X + 2, dot1.Y + 2), 0,
200 FillRect(RectF(dot1.X - 2, dot2.Y - 2, dot1.X + 2, dot2.Y + 2), 0,
202 FillRect(RectF(dot2.X - 2, dot1.Y - 2, dot2.X + 2, dot1.Y + 2), 0,
204 FillRect(RectF(dot2.X - 2, dot2.Y - 2, dot2.X + 2, dot2.Y + 2), 0,
209 s := (dot1.X + dot2.X) / 2;
210 FillRect(RectF(s - 2, dot1.Y - 2, s + 2, dot1.Y + 2), 0,
212 FillRect(RectF(s - 2, dot2.Y - 2, s + 2, dot2.Y + 2), 0,
220 procedure TForm1.Image1Tap(Sender: TObject; const Point: TPointF);
231 i := dot1.X - dot2.X;
232 j := dot1.Y - dot2.Y;
233 if (i < 20) and (i > -20) and (j < 20) and (j > -20) then
239 SpeedButton2.Enabled := true;
243 SpeedButton2.Enabled := false;
250 procedure TForm1.SpeedButton1Click(Sender: TObject);