⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synfinddlg.pas

📁 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码 用delphi写的delphi源代码
💻 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 + -