在前面单文本的编辑器上,我开始钻研了下多页文本编辑器的的开发,暂且开发一个相对简单的多页文本编辑器吧,望大家共同进步。
开发环境:Delphi7
开发控件截图如下:
开发代码中涉及到的Unit1、Unit2、Uint3是笔者拓展文本编辑器另添加的功能实现,主要form是Form4,也就是Unit4.pas,可能大家直接拷贝代码会报错,希望注意这点,尽量不要全部直接拷贝,重要的是理解并掌握,笔者所做的–正确的做法,是当做参考与借鉴,希望能启发大家一些东西。代码如下:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ComCtrls,DateUtils,StrUtils, ExtCtrls;
type
TForm4 = class(TForm)
PageControl1: TPageControl;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
FontDialog1: TFontDialog;
ReplaceDialog1: TReplaceDialog;
FindDialog1: TFindDialog;
MainMenu1: TMainMenu;
F1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
C1: TMenuItem;
E1: TMenuItem;
W1: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
O1: TMenuItem;
W2: TMenuItem;
F2: TMenuItem;
V1: TMenuItem;
S1: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
T1: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N13: TMenuItem;
H1: TMenuItem;
N12: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
Timer1: TTimer;
TabSheet1: TTabSheet;
Memo1: TMemo;
StatusBar1: TStatusBar;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure C1Click(Sender: TObject);
procedure E1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure W2Click(Sender: TObject);
procedure F2Click(Sender: TObject);
procedure S1Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
// procedure N11Click(Sender: TObject);
// procedure N13Click(Sender: TObject);
// procedure N12Click(Sender: TObject);
// procedure N14Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure FindDialog1Find(Sender: TObject);
procedure ReplaceDialog1Find(Sender: TObject);
procedure ReplaceDialog1Replace(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
// procedure N20Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
i:word;
vList:TList;
vSheet:TTabSheet;
memo:TMemo;
j:Integer=0;
implementation
uses Unit3, Unit1, Unit2;
{$R *.dfm}
procedure TForm4.N2Click(Sender: TObject);
begin
OpenDialog1.Filter:='Txt (*.txt)|*.txt|PDF (*.pdf)|*.pdf|Doc (*.doc)|*.doc|Rtf (*.rtf)|*.rtf';
OpenDialog1.DefaultExt:='Txt|pdf|doc|rtf';//保存为RTF格式
if OpenDialog1.Execute then
begin
Memo.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
procedure TForm4.N3Click(Sender: TObject);
begin
SaveDialog1.Filter:='Txt (*.txt)|*.txt|PDF (*.pdf)|*.pdf|Doc (*.doc)|*.doc|Rtf (*.rtf)|*.rtf';
SaveDialog1.DefaultExt:='Txt|pdf|doc|rtf';//保存为RTF格式
if SaveDialog1.Execute then
begin
Memo.Lines.SaveToFile(Savedialog1.FileName);
end;
end;
procedure TForm4.C1Click(Sender: TObject);
begin
close;
end;
procedure TForm4.E1Click(Sender: TObject);
begin
exit;
end;
procedure TForm4.N4Click(Sender: TObject);
begin
Memo.CopyToClipboard;
end;
procedure TForm4.N5Click(Sender: TObject);
begin
Memo.CutToClipboard;
end;
procedure TForm4.N6Click(Sender: TObject);
begin
Memo.Lines.Text:='';
end;
procedure TForm4.N7Click(Sender: TObject);
begin
Memo.HideSelection:=False;//选定文本反底显示
Memo.SelectAll;
end;
procedure TForm4.N8Click(Sender: TObject);
begin
Memo.PasteFromClipboard;
end;
procedure TForm4.N16Click(Sender: TObject);
begin
Memo.Undo;
end;
procedure TForm4.N17Click(Sender: TObject);
begin
Memo.Refresh;
end;
procedure TForm4.F2Click(Sender: TObject);
begin
if FontDialog1.Execute then //判断是否执行
Memo.Font:=FontDialog1.Font;
end;
procedure TForm4.N1Click(Sender: TObject);
begin
//理解下面的代码,先好好想一下面向对象的思想,体会下面向对象的用法
vSheet:=TTabSheet.Create(self);
j:=j+1; //注意,j定义为全局变量
vSheet.Name:='page'+inttostr(j);//定义TabSheet名字,每新建一次,TabSheet编号跟着加一
//vSheet.Create(form4);
// vSheet:=vSheet.Create(PageControl1); //创建Tabsheet
vSheet.Parent:=pagecontrol1; //显示在pagecontrol1
vsheet.PageControl:=pageControl1;// 页面控制在第一页,至少从视觉上是如此
memo:=TMemo.Create(vSheet);
memo.Height:=649;
memo.Width:=1193;
memo.Parent:=vSheet; //指定父亲对象是sheet
vList.Add(memo);
// OpenDialog1.Filter:='JPG (*.jpg)|*.jpg| Txt (*.txt)|*.txt|PDF (*.pdf)|*.pdf';
OpenDialog1.Filter:='Txt (*.txt)|*.txt|PDF (*.pdf)|*.pdf|Doc (*.doc)|*.doc|Rtf (*.rtf)|*.rtf';
OpenDialog1.DefaultExt:='Txt|pdf|doc|rtf';//保存为RTF格式
if memo.Modified then
begin
i:=MessageDlg('文件被修改,是否保存?',mtConfirmation,[mbyes,mbNo,mbCancel],1);
if i=mryes then
begin
N2Click(Sender);
if OpenDialog1.Execute then
memo.Lines.LoadFromFile( OpenDialog1.FileName);
memo.Modified:=False; //打开后,设置标志
end;
if i=mrno then
if OpenDialog1.Execute then
begin
memo.Lines.LoadFromFile( OpenDialog1.FileName);
memo.Modified:=False; //打开后,设置标志
end;
end
else
begin
if OpenDialog1.Execute then
memo.Lines.LoadFromFile( OpenDialog1.FileName);
memo.Modified:=False; //打开后,设置标志
end;
end;
procedure TForm4.S1Click(Sender: TObject);
begin
StatusBar1.Color:=ClTeal;
// StatusBar1.SimpleText:=datetimetostr(now);
end;
{procedure TForm4.FormActivate(Sender: TObject);
begin
// StatusBar1.SimpleText:=datetimetostr(now);
//showmessage('Welcome to the world of words!');
end;
}
{
procedure TForm4.Timer1Timer(Sender: TObject);
begin
StatusBar1.SimpleText:=datetimetostr(now);
end;
}
procedure TForm4.W2Click(Sender: TObject);
var s:string;
rect:TRect;
begin
DrawText(Self.Canvas.Handle,PChar(s),-1,rect,DT_LEFT);
//Form1.Canvas.TextOut(20,20,s);
end;
procedure TForm4.N15Click(Sender: TObject);
begin
close;
end;
procedure TForm4.N9Click(Sender: TObject);
begin
form2.Show;
exit;
end;
procedure TForm4.N10Click(Sender: TObject);
begin
form3.Show;
end;
procedure TForm4.N19Click(Sender: TObject);
begin
FindDialog1.Execute;
end;
procedure TForm4.FindDialog1Find(Sender: TObject);
var
FoundAt:integer;
StartPos,ToEnd:integer;
begin
if Memo.SelLength<>0 then
begin
StartPos:=Memo.SelStart;
end
else
begin
startPos:=0;
end;
ToEnd:=length(Memo.Text)-startPos;
FoundAt:=POS(finddialog1.FindText,memo.Text);
if FoundAt<>0 then
begin
form4.Show;
Memo.SelStart:=FoundAt-1;
Memo.SelLength:=length(finddialog1.FindText);
end;
end;
procedure TForm4.ReplaceDialog1Find(Sender: TObject);
var
FoundAt:integer;
StartPos,ToEnd:integer;
begin
if Memo.SelLength<>0 then
begin
StartPos:=Memo.SelStart;
end
else
begin
startPos:=0;
end;
ToEnd:=length(Memo.Text)-startPos;
FoundAt:=POS(ReplaceDialog1.FindText,memo.Text);
if FoundAt<>0 then
begin
form4.Show;
Memo.SelStart:=FoundAt-1;
Memo.SelLength:=length(ReplaceDialog1.FindText);
end;
end;
procedure TForm4.ReplaceDialog1Replace(Sender: TObject);
var
FoundAt:integer;
StartPos,ToEnd:integer;
str:string;
begin
if Memo.SelLength<>0 then
begin
StartPos:=Memo.SelStart;
end
else
begin
startPos:=0;
end;
ToEnd:=length(Memo.Text)-startPos;
FoundAt:=POS(ReplaceDialog1.FindText,memo.Text);
if FoundAt<>0 then
begin
form4.Show;
Memo.SelStart:=FoundAt-1;
Memo.SelLength:=length(ReplaceDialog1.FindText);
str:=memo.SelText;
Memo1.Text:=AnsiReplaceText(Memo.Text,ReplaceDialog1.FindText,ReplaceDialog1.ReplaceText);
FoundAt:=POS(ReplaceDialog1.ReplaceText,memo.Text);
end;
end;
procedure TForm4.N20Click(Sender: TObject);
begin
ReplaceDialog1.Execute;
end;
procedure TForm4.Timer1Timer(Sender: TObject);
begin
StatusBar1.SimpleText:=datetimetostr(now);
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
vList:=TList.Create;
end;
procedure TForm4.FormDestroy(Sender: TObject);
begin
freeandnil(vList);
end;
end.
整体运行效果截图如下:
新建多次的页面截图如下:
仔细观察新建前与新建后的区别,会发现,每新建一次,就会使得TableSheet增加1,也即是图上显示的page0、page1…等。
好了,今天就讲到这里了,希望对大家有帮助,让我们共同进步,明天见吧!