高悬赏:自己写的小程序,怎么封装它的功能

浅看安魂曲 2017-07-28 03:36:55
把这个程序的已有的功能封装成一个类 要求这个类提供诸如查找 替换 查找文件等功能 然后前端只需要调用这些类方法即可




下面是代码:
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;
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.Lines.AddStrings(SearchFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)));
end;

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;
RichEdit1.Lines.AddStrings(SearchFile(DirectoryListBox1.GetItemPath(DirectoryListBox1.ItemIndex)));
end;

procedure TForm1.DirectoryListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
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
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);
end;
end.


下面是界面图:

...全文
1992 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-08-02
  • 打赏
  • 举报
回复
我有一个想法,就是你创建一个TmyRichEdit控件,继承自TRichEdit,把诸如查找 替换 查找文件等功能作为TmyRichEdit控件新增的方法。以后的程序用TmyRichEdit控件就可以了。
浅看安魂曲 2017-08-01
  • 打赏
  • 举报
回复
怎么把替换的功能给封装啊,试了好久,封装的时候下面的属性 不知道怎么办了 RichEdit1.SetFocus; RichEdit1.SelStart RichEdit1.SelLength
浅看安魂曲 2017-07-31
  • 打赏
  • 举报
回复
这个怎么封装啊

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;

type
TForm1 = class(TForm)
ReplaceDialog1: TReplaceDialog;
RichEdit1: TRichEdit;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1231: TMenuItem;
N1232: TMenuItem;
N1233: TMenuItem;
Edit1: TEdit;
Label1: TLabel;
BitBtn3: TBitBtn;
Edit2: TEdit;
Label2: TLabel;
N1: TMenuItem;
CheckBox1: TCheckBox;
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.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.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;
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
else if MessageBox(handle,'已经替换了以下所有单词,是否重新开始查找替换?', '替换窗口', MB_OKCANCEL)=IDOK then
end ;
end;

end.





浅看安魂曲 2017-07-28
  • 打赏
  • 举报
回复
如果要封装 改怎么弄 今天开始弄的封装 不怎么会
lyhoo163 2017-07-28
  • 打赏
  • 举报
回复
浅看安魂曲 2017-07-28
  • 打赏
  • 举报
回复
能不能发过来参考一下
lyhoo163 2017-07-28
  • 打赏
  • 举报
回复
你这个有包含VCL的功能,不宜封装。最好,仅封闭对数据库的搜索和调用。 我有一个自用的软件,与您有类似的功能。
某站1500元购买,后台Tinkphp 前端可封装打包 网页端加安卓苹果 可封装小程序功能介绍 1、支持用户发布任务、置顶任务、发布任务红包、浏览任务、下架任务、分享任务、管理任务、暂停任务、任务加量、结束任务等 2、接单排行榜奖励、邀请排行、新手任务、每日任务(后台设置相应奖励奖励) 3、后台可对任务进行审核、拒绝任务可以填拒绝原因、冻结任务、下架任务 4、支持每日签到(后台设置普通会员及会员每个签名赠送的奖金)任务置顶(后台设置普通会员及级会员置顶费用-按小时收费置顶) 5、后台添加任务分类,可设置分类图片、发布任务的最低金额、会员领取任务的等级。 6、支持轮播图、公告、任务搜索、按人气、佣金、时间搜索等。 7、支持在线支付,对接支付宝付款、微信支付、微信登录(需要在APP打开)短信对接阿里云短信(如需不要短信注册可联系免费客服更换) 8、用户可与雇主聊天、对任务或雇主进行举报、维权,平台管理员介入等 9、支持三级分销功能、邀请海报、链接邀请、二维码邀请、自动识别并绑定邀请码(比如我分享给您链接,打开之后系统自动识别自动填邀请码,无需手动填) 10、支持会员功能、在线客服功能、粉丝关注功能、帮助中心、设置头像、修改密码、修改昵称。 11、支持每日签到(后台设置普通会员及会员每个签名赠送的奖金)任务置顶(后台设置普通会员及级会员置顶费用-按小时收费置顶) 12、数据库本地化,微信登录需要配置前端封装文件,海报分享无需任何第三方,可随意分享,网页版附带APP下载图标(APP不显示下载图标

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧