Day5 简单多页文本编辑器的编写

在前面单文本的编辑器上,我开始钻研了下多页文本编辑器的的开发,暂且开发一个相对简单的多页文本编辑器吧,望大家共同进步。
开发环境: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…等。
好了,今天就讲到这里了,希望对大家有帮助,让我们共同进步,明天见吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值