文本编辑器

unit UOpenSave;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids,StrUtils;//添加StrUtils引用

type
  TFOpenSave = class(TForm)
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    BOpen: TButton;
    BSave: TButton;
    BExit: TButton;
    BNew: TButton;
    procedure BOpenClick(Sender: TObject);
    procedure BSaveClick(Sender: TObject);
    procedure BExitClick(Sender: TObject);
    procedure BNewClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FOpenSave: TFOpenSave;
  CurFile:String; //表示系统中的当前文件的文件名

implementation

{$R *.dfm}

procedure TFOpenSave.BOpenClick(Sender: TObject);
var
  FileHandle: Integer;  //文件句柄
  FileLength: Integer;   //文件长度
  BytesRead: Integer;
  Buffer: PChar;
begin
  if OpenDialog1.Execute then
  begin
    //读取文件内容,并在TMemo组件中显示
    try
      //将要打开的文件的文件名设置为当前文件名
      CurFile :=  OpenDialog1.FileName;
      FileHandle := FileOpen(CurFile, fmOpenRead);
      FileLength := FileSeek(FileHandle,0,2);
      FileSeek(FileHandle,0,0);
      //如果文件的长度超过了TMemo组件所能显示的字符数的最大值,则对其进行截取
      if FileLength > Memo1.MaxLength then
        FileLength :=  Memo1.MaxLength ;
      //分配缓冲区,用于保存文件中的数据
      Buffer := PChar(AllocMem(FileLength + 1));
      BytesRead := FileRead(FileHandle, Buffer^, FileLength);
      FileClose(FileHandle);
      //将缓冲区中的数据显示在TMemo组件中
      Memo1.Text :=Buffer;
    finally
      FreeMem(Buffer);  //释放缓冲区
    end;
  end;  //if
 end;


procedure TFOpenSave.BSaveClick(Sender: TObject);
var
  FileLength: Integer; //写入的文件的长度
  IfLoop:Boolean;   //判断是否已选择到合适的文件名
  FileHandle: Integer;  //文件句柄
  Buffer: PChar;
  MText:  String;
begin
 IfLoop :=True;
 if CurFile='' then
 while   IfLoop do
 begin
   IfLoop :=False;
   if SaveDialog1.Execute then
    begin
       CurFile:= SaveDialog1.FileName ;
       if not  AnsiContainsStr(CurFile,'.') then
            CurFile := CurFile +'.txt';     //添加文件名后缀
       if FileExists(SaveDialog1.FileName) then
          begin
             if  MessageDlg('您所指定的文件已存在,是否替换?',
                     mtConfirmation, [mbYes, mbNo], 0) = mrNo then
                  IfLoop:=True;     //如果要重新选择,则再次弹出文件保存对话框
          end  ;
    end ;//if   SaveDialog1.Execute then
 end;     //while

   //分配缓冲区
   MText := Memo1.Text;
   FileLength := Length(MText);
   Buffer := PChar(AllocMem(FileLength + 1));
   StrPCopy(Buffer,MText);

   //保存文件
   try
      FileHandle := FileCreate(CurFile);
      FileWrite(FileHandle,   Buffer^, FileLength);
      FileClose(FileHandle);
   finally
      FreeMem(Buffer);  //释放缓冲区
    end;

end;

procedure TFOpenSave.BExitClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TFOpenSave.BNewClick(Sender: TObject);
begin
  Memo1.Text :='';
  CurFile :='';
end;

end.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值