刚刚开始接触DELPHI10 自己做的小程序,应该怎么把查找替换和打开文件等功能封装起来啊啊啊!!!
unit Unit1;interfaceuses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.FileCtrl,
  Vcl.ComCtrls, Vcl.Menus, dxGDIPlusClasses, Vcl.ExtCtrls;type
  TForm1 = class(TForm)
    DirectoryListBox1: TDirectoryListBox;
    DriveComboBox1: TDriveComboBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Edit3: TEdit;
    BitBtn3: TBitBtn;
    StatusBar1: TStatusBar;
    RichEdit1: TRichEdit;
    CheckBox1: TCheckBox;
    返回: TBitBtn;
    Image1: TImage;
    Label2: TLabel;
    选中打开文件: TBitBtn;
    BitBtn5: TBitBtn;
    ReplaceDialog1: TReplaceDialog;
    procedure BitBtn2Click(Sender: TObject);
    procedure DirectoryListBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure RichEdit1Click(Sender: TObject);
    procedure 返回Click(Sender: TObject);
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    procedure 选中打开文件Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure ReplaceDialog1Replace(Sender: TObject);
    procedure ReplaceDialog1Find(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  s,b:string;
  a,c:integer;
implementation
{$R *.dfm}function searchfile(path:string):TStringList;
var SearchRec:TSearchRec;
    found:integer; //定义函数 searchfile,查找后缀名为pas的文件
    list:TStringList;
begin
list:=TStringList.Create;
found:=FindFirst(path+'\*.pas',faAnyFile,SearchRec);
 while  found=0 do
    begin
    if (SearchRec.Name<>'.')
    and (SearchRec.Name<>'..')
    and (SearchRec.Attr<>faDirectory)
    then List.Add(SearchRec.Name);    
    found:=FindNext(SearchRec);
    end;
    FindClose(SearchRec);
    searchfile:=list;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
RichEdit1.Lines.Clear;//向richedit1里添加选中文件夹下面一层的pas文件..
RichEdit1.Lines.AddStrings(SearchFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)));
end;     //DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)为选中文件夹的路径
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if MessageBox(handle,'确定要关闭程序', '关闭窗口', MB_OKCANCEL)=IDOK//若为确定按钮,则退出
then close; //关闭 程序
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var i,j:integer;
s1,s2:string;
begin
//判断是否区分大小写
if checkbox1.Checked=true  then
begin
 RichEdit1.Lines.LoadFromFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+b ) ;
 RichEdit1.Text:=AnsiLowerCase(RichEdit1.Text);
 ReplaceDialog1.findText:=AnsiLowerCase(ReplaceDialog1.findText);
 end;
if checkbox1.Checked=false  then RichEdit1.Lines.LoadFromFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+b) ;
//截取字符串并记录次数
 i:=0;
 s1:=ReplaceDialog1.findText;
 s2:=RichEdit1.Text;
 while pos(s1,s2)>0 do
 begin
  s2:=copy(s2,pos(s1,s2)+1,length(RichEdit1.Text));
  inc(i);
 end;
edit3.Text:=inttostr(i);
if i=0 then  showmessage('找不到你搜索的单词!!');
end;
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
ReplaceDialog1.Execute;  //启动替换
end;procedure TForm1.选中打开文件Click(Sender: TObject);
begin
b:=richedit1.Lines.Strings[a];
  if a<RichEdit1.Lines.Count   then
  RichEdit1.Lines.LoadFromFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+RichEdit1.Lines.Strings[a]);//把选中的文件导入到richedit1里面
end;procedure TForm1.返回Click(Sender: TObject);
begin
RichEdit1.Lines.Clear;//向memo1里添加选中文件夹下面一层的pas文件..
RichEdit1.Lines.AddStrings(SearchFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)));
end;procedure TForm1.DirectoryListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin   // 获取选中DirectoryListBox1的路径
DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin  //启动窗体,清空数据
RichEdit1.Clear;
edit3.Text:=inttostr(0);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin    //按键F3,运行   定位(Sender)  代码(往下查找单词/字符串)
if key=VK_F3 then ReplaceDialog1Find(Sender) ;
end;
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Form1.VertScrollBar.Position:=   Form1.VertScrollBar.Position-   (WheelDelta   div   20);
end;
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
FoundAt: LongInt;    //记事本查找功能
StartPos, ToEnd: integer;
SearchFlag: TSearchTypes;
begin
if ReplaceDialog1.findText='' then showmessage('请输入查找的单词!!');if checkbox1.Checked=true  then//判断如果不区分被选中才执行
ReplaceDialog1.findText:=AnsiLowerCase(ReplaceDialog1.findText);
with RichEdit1 do
begin
StartPos:=SelStart+SelLength;
ToEnd:=Length(Text) - StartPos;
FoundAt:=FindText(ReplaceDialog1.findText, StartPos, ToEnd, [stMatchCase]);//能够返回查找的位置
if FoundAt<>-1 then
begin
SetFocus;
SelStart:=FoundAt;
SelLength:=Length(ReplaceDialog1.findText);
richedit1.SelAttributes.Color := clRed;
end
else
begin
SelLength:=0;
SelStart:=StartPos;
Application.MessageBox(PChar('找不到您搜索的单词'+ReplaceDialog1.findText),'查找失败',0);
end;
end;
end;
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
   FoundAt: LongInt;                 //查找字符串的位置
  StartPos, ToEnd: Integer;         //查找的起始位置和查找长度
begin
 if RichEdit1.SelLength=0 then
    ReplaceDialog1Find(nil)      //如果尚未找到特定字符串,则查找
  else
  begin
   StartPos :=RichEdit1.SelStart+length(ReplaceDialog1.ReplaceText)-RichEdit1.SelLength+1;
   RichEdit1.SelText:=ReplaceDialog1.ReplaceText;
   ToEnd:=Length(RichEdit1.Text) - StartPos;
   FoundAt := RichEdit1.FindText(ReplaceDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
   //如果已找到特定字符串,则..
   if FoundAt <> -1 then
      begin
       RichEdit1.SetFocus;
       RichEdit1.SelStart := FoundAt;
       RichEdit1.SelLength := Length(ReplaceDialog1.FindText);
      end
      else//如果未找到特定字符串,则进行如下处理
     if   MessageBox(handle,'已经替换了以下所有单词,是否重新开始查找替换?', '替换窗口', MB_OKCANCEL)=IDOK  then
     RichEdit1.Lines.LoadFromFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)+'\'+b) ;
  end ;
end;
procedure TForm1.RichEdit1Click(Sender: TObject);
var
   sstar,send:integer;
begin
a:=SendMessage(RichEdit1.Handle,EM_LineFromChar,RichEdit1.SelStart,0); //获取当前选中richedit1的行号
end;
end.