-
Notifications
You must be signed in to change notification settings - Fork 8
/
frmAreaSelector.pas
102 lines (86 loc) · 2.41 KB
/
frmAreaSelector.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
unit frmAreaSelector;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ToolWin,
System.ImageList, Vcl.ImgList, Vcl.ExtCtrls;
type
TformAreaSelector = class(TForm)
ImageList1: TImageList;
Shape1: TShape;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
formAreaSelector: TformAreaSelector;
fPrevClip: TRect;
fMouseIsDown: Boolean = False;
implementation
{$R *.dfm}
uses main;
procedure TformAreaSelector.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
ClipCursor(@fPrevClip);
end;
procedure TformAreaSelector.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
Color := clWhite;
AlphaBlend := True;
AlphaBlendValue := 150;
KeyPreview := True;
TransparentColor := True;
TransparentColorValue := clFuchsia;
DoubleBuffered := True;
GetClipCursor(fPrevClip);
end;
procedure TformAreaSelector.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then
Close
end;
procedure TformAreaSelector.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
R: TRect;
begin
if Button = mbLeft then
begin
R := BoundsRect;
ClipCursor(@R);
Shape1.Left := X;
Shape1.Top := Y;
fMouseIsDown := True;
end;
end;
procedure TformAreaSelector.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if fMouseIsDown then
begin
Shape1.Width := X - Shape1.Left;
Shape1.Height := Y - Shape1.Top;
end;
end;
procedure TformAreaSelector.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
fMouseIsDown := False;
ClipCursor(@fPrevClip);
end;
end;
end.