⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unotepad.pas

📁 利用DELPHI7来编写的一个记事本。不是非常的完善
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit uNotepad;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls;

type
  TFrmNotepad = class(TForm)
    MainMenu1: TMainMenu;
    Mn01File: TMenuItem;
    Mn02Edit: TMenuItem;
    Mn03Format: TMenuItem;
    Mn04View: TMenuItem;
    Mn05Help: TMenuItem;
    Mn11_1New: TMenuItem;
    Mn11_2Open: TMenuItem;
    Mn11_3Save: TMenuItem;
    Mn11_4Saveto: TMenuItem;
    Mn11_5: TMenuItem;
    Mn11_6Page: TMenuItem;
    Mn11_7Print: TMenuItem;
    Mn11_8: TMenuItem;
    Mn11_9Exit: TMenuItem;
    Mn12_1Cancel: TMenuItem;
    Mn12_2: TMenuItem;
    Mn12_3Cut: TMenuItem;
    Mn12_4Copy: TMenuItem;
    Mn12_5Plaster: TMenuItem;
    Mn12_6Del: TMenuItem;
    Mn12_7: TMenuItem;
    Mn12_8Lookup: TMenuItem;
    Mn12_9LookupNext: TMenuItem;
    Mn12_10Replace: TMenuItem;
    Mn12_11Goto: TMenuItem;
    Mn12_12: TMenuItem;
    Mn12_13All: TMenuItem;
    Mn12_14Date: TMenuItem;
    Mn13_1Newline: TMenuItem;
    Mn13_2Font: TMenuItem;
    Mn14_1Status: TMenuItem;
    Mn15_1Motif: TMenuItem;
    Mn15_2: TMenuItem;
    Mn15_3About: TMenuItem;
    StatusBar: TStatusBar;
    RichEdit: TRichEdit;
    SaveDialog: TSaveDialog;
    OpenDialog: TOpenDialog;
    PMnRichEdit: TPopupMenu;
    PMnRE01: TMenuItem;
    PMnRE02: TMenuItem;
    PMnRE03: TMenuItem;
    PMnRE04: TMenuItem;
    PMnRE05: TMenuItem;
    PMnRE06: TMenuItem;
    PMnRE07: TMenuItem;
    PMnRE08: TMenuItem;
    PMnRE09: TMenuItem;
    PMnRE010: TMenuItem;
    PMnRE011: TMenuItem;
    PMnRE012: TMenuItem;
    PMnRE112_1: TMenuItem;
    PMnRE112_2: TMenuItem;
    PMnRE112_3: TMenuItem;
    PMnRE112_4: TMenuItem;
    PMnRE112_5: TMenuItem;
    PMnRE112_6: TMenuItem;
    PMnRE112_7: TMenuItem;
    PMnRE112_8: TMenuItem;
    PMnRE112_9: TMenuItem;
    PMnRE112_10: TMenuItem;
    PMnRE112_11: TMenuItem;
    PMnRE112_12: TMenuItem;
    PMnRE112_13: TMenuItem;
    PMnRE112_14: TMenuItem;
    PMnRE112_15: TMenuItem;
    PMnRE112_16: TMenuItem;
    PMnRE112_17: TMenuItem;
    FontDialog: TFontDialog;
    FindDialog: TFindDialog;
    ReplaceDialog: TReplaceDialog;
    PrinterSetupDialog: TPrinterSetupDialog;
    PrintDialog: TPrintDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Mn11_1NewClick(Sender: TObject);
    procedure Mn11_2OpenClick(Sender: TObject);
    procedure Mn11_3SaveClick(Sender: TObject);
    procedure Mn11_4SavetoClick(Sender: TObject);
    procedure Mn11_6PageClick(Sender: TObject);
    procedure Mn11_7PrintClick(Sender: TObject);
    procedure Mn11_9ExitClick(Sender: TObject);
    procedure Mn12_1CancelClick(Sender: TObject);
    procedure Mn12_3CutClick(Sender: TObject);
    procedure Mn12_4CopyClick(Sender: TObject);
    procedure Mn12_5PlasterClick(Sender: TObject);
    procedure Mn12_6DelClick(Sender: TObject);
    procedure Mn12_8LookupClick(Sender: TObject);
    procedure Mn12_9LookupNextClick(Sender: TObject);
    procedure Mn12_10ReplaceClick(Sender: TObject);
    procedure Mn12_11GotoClick(Sender: TObject);
    procedure Mn12_13AllClick(Sender: TObject);
    procedure Mn12_14DateClick(Sender: TObject);
    procedure Mn13_1NewlineClick(Sender: TObject);
    procedure Mn13_2FontClick(Sender: TObject);
    procedure Mn14_1StatusClick(Sender: TObject);
    procedure Mn15_1MotifClick(Sender: TObject);
    procedure Mn15_3AboutClick(Sender: TObject);
    procedure FindDialogFind(Sender: TObject);
    procedure RichEditKeyPress(Sender: TObject; var Key: Char);
    procedure Mn02EditClick(Sender: TObject);
    procedure ReplaceDialogFind(Sender: TObject);
    procedure RichEditMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure RichEditKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    FileStatus : integer;//标志文件是否已经存在,0为不存在或者新建,1为已存在或者编辑
    FileIndex : TextFile; //文件指针,有关本文本文件的相关信息
    FilePath : string;//文件路径
    FileName : string;//文件名
    procedure SetCaRichEdit(RichEdit : TRichEdit;var row,col : integer);
  public
    { Public declarations }
    row : integer;//获得转到的行数
  end;

var
  FrmNotepad: TFrmNotepad;

implementation

uses uNtpdAboutbox,ShellAPI, uGotorow, search;

{$R *.dfm}

procedure TFrmNotepad.SetCaRichEdit(RichEdit : TRichEdit;var row,col : integer);//将行数转化为具体位置
var
  i, iStopLine, iSelStart:integer;
begin
  if (RichEdit = nil) then close;
  if Row = 0 then Row := 1;
  if Col = 0 then Col := 1;
  iStopLine := Row - 1;
  iSelStart := 0;
  for i := 0 to RichEdit.Lines.Count - 1 do
  begin
    if i = iStopLine then
    begin
      if Length(RichEdit.Lines[i]) >= Col then
        Inc(iSelStart, Col)
      else
        Inc(iSelStart, Length(RichEdit.Lines[i]) + 2);
      Break;
    end;
    Inc(iSelStart, Length(RichEdit.Lines[i]) + 2);
  end;
  if iSelStart > 0 then
    Dec(iSelStart);

  SendMessage(RichEdit.Handle, EM_SETSEL, iSelStart, iSelStart);
  Row := SendMessage(RichEdit.Handle, EM_LINEFROMCHAR, RichEdit.SelStart, 0);
  Col := RichEdit.SelStart - SendMessage(RichEdit.Handle, EM_LINEINDEX, Row, 0);

  SendMessage(RichEdit.Handle, EM_SCROLLCARET, 0, 0);
end;

function LastPos(SubStr,S : string):Integer; //搜索子串在母串中的最后出现的地址
var
  Found,SbLen,SLen : integer;//返回的子串位置,子串大小,母串大小
begin
  SLen := Length(S);
  SbLen := Length(SubStr);
  Found := 0;
  if SLen<SbLen then
  begin
    result := 0;
    exit;
  end;
  SLen := SLen-SbLen+1;
  while (SLen>0) and (Found=0) do
  begin
    if Copy(S,SLen,SbLen)=SubStr then
      Found := SLen;
    Dec(SLen);
  end;
  LastPos := Found;
end;

function Ntpd_GetFileName(FilePath : string):string; //传入一个文件路径,返回文件名
begin
  result := copy(FilePath,LastPos('\',FilePath)+1,length(FilePath)-LastPos('\',FilePath));
end;

procedure TFrmNotepad.FormCreate(Sender: TObject);
begin
  FilePath := '无标题';
  FileName := '无标题';
end;

procedure TFrmNotepad.FormShow(Sender: TObject);
begin
//
end;

procedure TFrmNotepad.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ret : integer;//接收返回值
begin
  if RichEdit.Modified = true then
  begin
    ret := application.MessageBox(pchar('文件 '+FilePath+' 的文字已经改变。'+#13#13+'想保存文件吗?'),'记事本',MB_ICONEXCLAMATION+MB_YESNOCANCEL);
    case ret of
      6 : if SaveDialog.Execute then
          begin
            RichEdit.Lines.SaveToFile(SaveDialog.FileName);
            exit;
          end;
      7 : begin
            RichEdit.Clear;
            exit;
          end;
    else
      exit;
    end;
  end
  else
    exit;
end;

procedure TFrmNotepad.Mn11_1NewClick(Sender: TObject); //新建
var
  ret : integer;//接收返回值
begin
  if RichEdit.Modified = true then
  begin
    ret := application.MessageBox(pchar('文件 '+FilePath+' 的文字已经改变。'+#13#13+'想保存文件吗?'),'记事本',MB_ICONEXCLAMATION+MB_YESNOCANCEL);
    case ret of
      6 : if SaveDialog.Execute then
            RichEdit.Lines.SaveToFile(SaveDialog.FileName);
      7 : RichEdit.Clear;
    else
      exit;
    end;
  end;
  RichEdit.Clear;
  FileName := '无标题';
  FilePath := '无标题';
  self.Caption := FileName + ' - 记事本';
  FileStatus := 0;
end;

procedure TFrmNotepad.Mn11_2OpenClick(Sender: TObject); //打开
var
  ret : integer;
begin
  if RichEdit.Modified = true then
  begin
    ret := application.MessageBox(pchar('文件 '+FilePath+' 的文字已经改变。'+#13#13+'想保存文件吗?'),'记事本',MB_ICONEXCLAMATION+MB_YESNOCANCEL);
    case ret of
      6 : if SaveDialog.Execute then
          begin
            RichEdit.Lines.SaveToFile(SaveDialog.FileName);
            RichEdit.Clear;
          end;
      7 : begin
            RichEdit.Clear;
          end;
    else
      exit;
    end;
  end
  else
    RichEdit.Clear;

  if OpenDialog.Execute then
  begin
    RichEdit.Lines.LoadFromFile(OpenDialog.FileName);
    RichEdit.Modified := false;
    FilePath := OpenDialog.FileName;
    FileName := Ntpd_GetFileName(FilePath);
    self.Caption := FileName + ' - 记事本';
  end;
end;

procedure TFrmNotepad.Mn11_3SaveClick(Sender: TObject);//保存
begin
  if FileStatus = 0 then  //文件不存在时
  begin
    if SaveDialog.Execute then  //且确认保存
    begin
      RichEdit.Lines.SaveToFile(SaveDialog.FileName);
      FilePath := SaveDialog.FileName;
      FileName := Ntpd_GetFileName(FilePath);
      FileStatus := 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -