📄 synfinddlg.pas
字号:
{-------------------------------------------------------------------------------
单元: SynFindDlg.pas
作者: 姚乔锋
日期: 2004.11.26
说明: 查找对话框
版本: 1.00 00
-------------------------------------------------------------------------------}
unit SynFindDlg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, Buttons,
SynEditTypes, SynEditSearcher;
type
TSynFindDlg = class(TSynSearchDialog)
cbSearchText: TComboBox;
rgSearchDirection: TRadioGroup;
btnOK: TButton;
btnCancel: TButton;
cbSearchCaseSensitive: TCheckBox;
cbSearchWholeWords: TCheckBox;
cbSearchFromCursor: TCheckBox;
cbSearchSelectedOnly: TCheckBox;
cbRegularExpression: TCheckBox;
AssistantMenu: TPopupMenu;
ETabChar: TMenuItem;
ECRChar: TMenuItem;
S1: TMenuItem;
EAnyChar: TMenuItem;
ECharInRange: TMenuItem;
S2: TMenuItem;
ECharOutRange: TMenuItem;
EMatchBOL: TMenuItem;
EMatchEOL: TMenuItem;
N9: TMenuItem;
EMatchZeroOrMore: TMenuItem;
EMatchOneOrMore: TMenuItem;
EMatchZeroOrOne: TMenuItem;
EMatchNTimes: TMenuItem;
EMatchLeastNTimes: TMenuItem;
EMatchTimesRange: TMenuItem;
N1: TMenuItem;
EMatchNumber: TMenuItem;
EMatchNonNumber: TMenuItem;
EMatchAnySpace: TMenuItem;
EMatchAnyNonSpace: TMenuItem;
ELFChar: TMenuItem;
lbl1: TLabel;
AssistantButton: TSpeedButton;
procedure cbSearchTextChange(Sender: TObject);
procedure AssistantMenuClick(Sender: TObject);
procedure AssistantButtonClick(Sender: TObject);
protected
procedure UpdateButton; virtual;
public
procedure SetSearchData(const FindText, ReplaceText : string;
FindHistory, ReplaceHistory : TStrings;
const SearchOptions : TSynSearchOptions;
const RegexSearch : Boolean); override;
procedure getSearchData(var FindText, ReplaceText : string;
FindHistory, ReplaceHistory : TStrings;
var SearchOptions : TSynSearchOptions;
var RegexSearch : Boolean); override;
end;
implementation
{$R *.DFM}
procedure TSynFindDlg.cbSearchTextChange(Sender: TObject);
begin
UpdateButton;
end;
procedure TSynFindDlg.UpdateButton;
begin
btnOk.Enabled := cbSearchText.Text <> '';
end;
procedure TSynFindDlg.AssistantMenuClick(Sender: TObject);
begin
cbRegularExpression.Checked := true;
If Sender = ETabChar then
cbSearchText.SelText := '\t';
If Sender = ECRChar then
cbSearchText.SelText := '\r';
If Sender = ELFChar then
cbSearchText.SelText := '\n';
If Sender = EAnyChar then
cbSearchText.SelText := '.';
If Sender = ECharInRange then
cbSearchText.SelText := '[]';
If Sender = ECharOutRange then
cbSearchText.SelText := '[^]';
If Sender = EMatchBOL then
cbSearchText.SelText := '^';
If Sender = EMatchEOL then
cbSearchText.SelText := '$';
If Sender = EMatchZeroOrMore then
cbSearchText.SelText := '*';
If Sender = EMatchOneOrMore then
cbSearchText.SelText := '+';
If Sender = EMatchZeroOrOne then
cbSearchText.SelText := '?';
If Sender = EMatchNTimes then
cbSearchText.SelText := '{1}';
If Sender = EMatchLeastNTimes then
cbSearchText.SelText := '{1,}';
If Sender = EMatchTimesRange then
cbSearchText.SelText := '{1,1}';
If Sender = EMatchNumber then
cbSearchText.SelText := '\d';
If Sender = EMatchNonNumber then
cbSearchText.SelText := '\D';
If Sender = EMatchanySpace then
cbSearchText.SelText := '\s';
If Sender = EMatchanyNonSpace then
cbSearchText.SelText := '\S';
end;
procedure TSynFindDlg.getSearchData(var FindText, ReplaceText: string;
FindHistory, ReplaceHistory: TStrings;
var SearchOptions: TSynSearchOptions; var RegexSearch: Boolean);
begin
inherited;
FindText := cbSearchText.Text;
FindHistory.Assign(cbSearchText.Items);
RegexSearch := cbRegularExpression.Checked;
SearchOptions := [];
If boolean(rgSearchDirection.ItemIndex) then
SearchOptions := SearchOptions + [ssoBackwards];
If cbSearchCaseSensitive.Checked then
SearchOptions := SearchOptions + [ssoMatchCase];
If cbSearchWholeWords.Checked then
SearchOptions := SearchOptions + [ssoWholeWord];
If cbSearchSelectedOnly.Checked then
SearchOptions := SearchOptions + [ssoSelectedOnly];
If not cbSearchFromCursor.Checked then
SearchOptions := SearchOptions + [ssoEntireScope];
end;
procedure TSynFindDlg.SetSearchData(const FindText, ReplaceText: string;
FindHistory, ReplaceHistory: TStrings;
const SearchOptions: TSynSearchOptions; const RegexSearch: Boolean);
begin
inherited;
cbSearchText.Text := FindText;
cbSearchText.Items.Assign(FindHistory);
rgSearchDirection.ItemIndex := integer(ssoBackwards in SearchOptions);
cbRegularExpression.Checked := RegexSearch;
cbSearchCaseSensitive.Checked:= ssoMatchCase in SearchOptions;
cbSearchWholeWords.Checked:= ssoWholeWord in SearchOptions;
cbSearchSelectedOnly.Checked:= ssoSelectedOnly in SearchOptions;
cbSearchFromCursor.Checked:= not (ssoEntireScope in SearchOptions);
end;
procedure TSynFindDlg.AssistantButtonClick(Sender: TObject);
var
P : TPoint;
begin
with P do
begin
x := AssistantButton.Left;
y := AssistantButton.Top + AssistantButton.Height;
end;
with ClientToScreen(p) do
AssistantMenu.Popup(x, y);
end;
initialization
FindDialogClass := TSynFindDlg;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -