-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathSearchForm.pas
More file actions
126 lines (110 loc) · 2.84 KB
/
SearchForm.pas
File metadata and controls
126 lines (110 loc) · 2.84 KB
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
unit SearchForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SynEdit, SynEditMiscClasses, SynEditSearch, SynEditTypes,
ImgList;
type
TSimpleSearchForm = class(TFrame)
edFind: TEdit;
btnPrevious: TButton;
btnNext: TButton;
SearchImages: TImageList;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure edFindKeyPress(Sender: TObject; var Key: Char);
procedure btnNextClick(Sender: TObject);
procedure btnPreviousClick(Sender: TObject);
private
{ Private declarations }
FIndex: Integer;
FScope: TSynEdit;
FOptions: TSynSearchOptions;
procedure SelectIndex(AIndex: Integer);
procedure UpdateSearch();
public
{ Public declarations }
constructor Create(AOwner: TComponent; AScope: TSynEdit); reintroduce;
procedure FindNext();
procedure FindPrevious();
end;
implementation
uses
Math;
{$R *.dfm}
{ TSimpleSearchForm }
procedure TSimpleSearchForm.btnNextClick(Sender: TObject);
begin
FindNext();
end;
procedure TSimpleSearchForm.btnPreviousClick(Sender: TObject);
begin
FindPrevious();
end;
constructor TSimpleSearchForm.Create(AOwner: TComponent;
AScope: TSynEdit);
begin
inherited Create(AOwner);
FScope := AScope;
end;
procedure TSimpleSearchForm.edFindKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if Trim(edFind.Text) <> '' then
begin
FIndex := 0;
FOptions := [ssoEntireScope];
FScope.SearchEngine.Pattern := edFind.Text;
FScope.SearchEngine.Options := FOptions;
if FScope.SearchEngine.FindAll(FScope.Text) = 0 then
begin
ShowMessage('Searchstring ' + QuotedStr(edFind.Text) + ' not found');
end
else
begin
SelectIndex(FIndex);
end;
end;
Key := #0;
end;
end;
procedure TSimpleSearchForm.FindNext;
begin
if Visible then
begin
UpdateSearch();
if FIndex + 1 < FScope.SearchEngine.ResultCount then
begin
Inc(FIndex);
SelectIndex(FIndex);
end;
end;
end;
procedure TSimpleSearchForm.FindPrevious;
begin
if Visible then
begin
UpdateSearch();
if (FIndex - 1 >= 0) then
begin
Dec(FIndex);
SelectIndex(FIndex);
end;
end;
end;
procedure TSimpleSearchForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caHide;
end;
procedure TSimpleSearchForm.SelectIndex(AIndex: Integer);
begin
FScope.SelStart := FScope.SearchEngine.Results[AIndex] - 1;
FScope.SelLength := FScope.SearchEngine.Lengths[AIndex];
end;
procedure TSimpleSearchForm.UpdateSearch;
begin
FScope.SearchEngine.FindAll(FScope.Text);
FIndex := Min(Max(FIndex, 0), FScope.SearchEngine.ResultCount - 1);
end;
end.