剛剛開始接觸DELPHI10 自己做的小程式,應該怎么把查找替換和打開檔案等功能封裝起來啊啊啊!!!
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.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.

uj5u.com熱心網友回復:
你這個有包含VCL的功能,不宜封裝。最好,僅封閉對資料庫的搜索和呼叫。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/52164.html
