怎么把这个程序的功能(查找,替换和统计)封装,有大佬教教吗?
delphi吧
全部回复
仅看楼主
level 6
自学的,最好仔细一些,么么哒!
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Buttons,
Vcl.Menus, dxGDIPlusClasses, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
ReplaceDialog1: TReplaceDialog;
RichEdit1: TRichEdit;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1231: TMenuItem;
N1232: TMenuItem;
N1233: TMenuItem;
Edit1: TEdit;
BitBtn3: TBitBtn;
Edit2: TEdit;
N1: TMenuItem;
CheckBox1: TCheckBox;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
procedure ReplaceDialog1Find(Sender: TObject);
procedure ReplaceDialog1Replace(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N1232Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
richedit1.Clear;
end;
procedure TForm1.N1232Click(Sender: TObject);
begin
openDialog1.Execute;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.N1Click(Sender: TObject);
begin
ReplaceDialog1.Execute;
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
i,j:integer;
s1,s2:string;
begin
if checkbox1.Checked=true then
begin
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName) ;
RichEdit1.Text:=AnsiLowerCase(RichEdit1.Text);
ReplaceDialog1.findText:=AnsiLowerCase(ReplaceDialog1.findText);
end;
if checkbox1.Checked=false then //区分大小写
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName) ;
i:=0;
s1:=edit2.Text;
s2:=RichEdit1.Text;
while pos(s1,s2)>0 do
begin
s2:=copy(s2,pos(s1,s2)+1,length(RichEdit1.Text));
inc(i);
end;
edit1.Text:=inttostr(i);
if i=0 then
showmessage('找不到你搜索的单词!!');
end;
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: integer;
SearchFlag: TSearchTypes;
begin
if not(frMatchCase in replaceDialog1.Options)then
begin
ReplaceDialog1.findText:=AnsiLowerCase(ReplaceDialog1.findText);
RichEdit1.Text:=AnsiLowerCase(RichEdit1.Text);
end;
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;
i,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
end ;
if frReplaceAll in ReplaceDialog1.Options then
StringReplace (richedit1.Text, ReplaceDialog1.FindText,ReplaceDialog1.replaceText,[rfReplaceAll]);
end;
end.
2017年07月31日 03点07分 1
level 6
版本:Delphi 10 Seattle
2017年07月31日 03点07分 2
吧务
level 14
就这么点代码,实在没啥好封装的。最多就是把dialog的内容用参数代替,richedit也弄成个参数,写成一个过程吧。
2017年07月31日 14点07分 3
level 8
可以联系我
2017年08月03日 12点08分 4
1