-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathudSearch.pas
115 lines (103 loc) · 4.07 KB
/
udSearch.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
103
104
105
106
107
108
109
110
111
112
113
114
{****************************************************************
$Id: udSearch.pas,v 1.2 2006-11-30 10:30:41 dale Exp $
****************************************************************}
unit udSearch;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, SynEdit, SynEditTypes;
type
TdSearch = class(TForm)
bCancel: TButton;
bOK: TButton;
cbCaseSensitive: TCheckBox;
cbPromptForReplace: TCheckBox;
cbRegexSearch: TCheckBox;
cbReplaceAll: TCheckBox;
cbReplaceText: TComboBox;
cbSearchText: TComboBox;
cbSelectedOnly: TCheckBox;
cbWholeWords: TCheckBox;
gbOptions: TGroupBox;
iIcon: TImage;
lReplaceText: TLabel;
lSearchText: TLabel;
pMain: TPanel;
rgDirection: TRadioGroup;
rgScope: TRadioGroup;
procedure bOKClick(Sender: TObject);
private
FReplace: Boolean;
end;
function ShowSearchDlg(bReplace, bSelection: Boolean): Boolean;
implementation
{$R *.DFM}
uses ConsVarsTypes;
function ShowSearchDlg(bReplace, bSelection: Boolean): Boolean;
begin
with TdSearch.Create(Application) do
try
FReplace := bReplace;
cbSearchText.Items.Text := sHistTxSrch;
cbSearchText.Text := sTxSearch;
if bReplace then begin
cbReplaceText.Items.Text := sHistTxRepl;
cbReplaceText.Text := sTxReplace;
end else begin
lReplaceText.Enabled := False;
cbReplaceText.Enabled := False;
cbReplaceText.Color := clBtnFace;
cbReplaceAll.Enabled := False;
cbPromptForReplace.Enabled := False;
end;
cbCaseSensitive.Checked := ssoMatchCase in TxSrchOptions;
cbWholeWords.Checked := ssoWholeWord in TxSrchOptions;
rgDirection.ItemIndex := Byte(
ssoBackwards in TxSrchOptions);
rgScope.ItemIndex := Byte(
ssoEntireScope in TxSrchOptions);
cbSelectedOnly.Enabled := bSelection;
cbSelectedOnly.Checked := bSelection and (ssoSelectedOnly in TxSrchOptions);
cbReplaceAll.Checked := ssoReplaceAll in TxSrchOptions;
cbPromptForReplace.Checked := ssoPrompt in TxSrchOptions;
cbRegexSearch.Checked := bRegexSearch;
Result := ShowModal=mrOK;
finally
Free;
end;
end;
//===================================================================================================================
// TdSearch
//===================================================================================================================
procedure TdSearch.bOKClick(Sender: TObject);
procedure ProcessCBHistory(cb: TComboBox);
var i: Integer;
begin
with cb do
if Text<>'' then begin
i := Items.IndexOf(Text);
if i<0 then Items.Insert(0, Text) else Items.Move(i, 0);
while Items.Count>30 do Items.Delete(30);
end;
end;
begin
sTxSearch := cbSearchText.Text;
sHistTxSrch := cbSearchText.Items.Text;
if FReplace then begin
sTxReplace := cbReplaceText.Text;
sHistTxRepl := cbReplaceText.Items.Text;
end;
TxSrchOptions := [];
if cbCaseSensitive.Checked then Include(TxSrchOptions, ssoMatchCase);
if cbWholeWords.Checked then Include(TxSrchOptions, ssoWholeWord);
if rgDirection.ItemIndex=1 then Include(TxSrchOptions, ssoBackwards);
if rgScope.ItemIndex=1 then Include(TxSrchOptions, ssoEntireScope);
if cbSelectedOnly.Checked then Include(TxSrchOptions, ssoSelectedOnly);
if FReplace then Include(TxSrchOptions, ssoReplace);
if FReplace and cbReplaceAll.Checked then Include(TxSrchOptions, ssoReplaceAll);
if cbPromptForReplace.Checked then Include(TxSrchOptions, ssoPrompt);
bRegexSearch := cbRegexSearch.Checked;
// Ñîõðàíÿåì èñòîðèþ
ProcessCBHistory(cbSearchText);
if cbReplaceText.Enabled then ProcessCBHistory(cbReplaceText);
end;
end.