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

📄 editor.pas

📁 通过编译,并能运行
💻 PAS
字号:
unit editor;

interface

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

type
  TEditForm = class(TForm)
    MainMenu: TMainMenu;
    EditMdiEdit: TMenuItem;
    CutMdiEdit: TMenuItem;
    CopyMdiEdit: TMenuItem;
    PasteMdiEdit: TMenuItem;
    DeleteMdiEdit: TMenuItem;
    N3: TMenuItem;
    SelectallMdiEdit: TMenuItem;
    Character1: TMenuItem;
    LeftMdiEdit: TMenuItem;
    RightMdiEdit: TMenuItem;
    CenterMdiEdit: TMenuItem;
    N4: TMenuItem;
    WordwrapMdiEdit: TMenuItem;
    N5: TMenuItem;
    FontMdiEdit: TMenuItem;
    Editor: TRichEdit;
    PopupMenuMdiEdit: TPopupMenu;
    CutPopup: TMenuItem;
    CopyPopup: TMenuItem;
    PastePopup: TMenuItem;
    FontDialogMdiEdit: TFontDialog;
    PrintDialogMdiEdit: TPrintDialog;
    FindDialogMdiEdit: TFindDialog;
    ReplaceDialogMdiEdit: TReplaceDialog;
    FindMdiEdit: TMenuItem;
    ReplaceMdiEdit: TMenuItem;
    N1: TMenuItem;
    SaveFileDialogMdiEdit: TSaveDialog;
    Save1: TMenuItem;
    FileMdiEdit: TMenuItem;
    NewMdiEdit: TMenuItem;
    OpenMdiEdit: TMenuItem;
    CloseMdiEdit: TMenuItem;
    SaveMdiEdit: TMenuItem;
    SaveAsMdiEdit: TMenuItem;
    N2: TMenuItem;
    PrintMdiEdit: TMenuItem;
    PrinterSetupMdiEdit: TMenuItem;
    N6: TMenuItem;
    ExitMdiEdit: TMenuItem;
    PrinterSetupDialogMdiEdit: TPrinterSetupDialog;
    procedure AlignClick(Sender: TObject);
    procedure WordwrapMdiEditClick(Sender: TObject);
    procedure CutMdiEditClick(Sender: TObject);
    procedure CopyMdiEditClick(Sender: TObject);
    procedure PasteMdiEditClick(Sender: TObject);
    procedure SelectallMdiEditClick(Sender: TObject);
    procedure DeleteMdiEditClick(Sender: TObject);
    procedure EditMdiEditClick(Sender: TObject);
    procedure SaveasMdiEditClick(Sender: TObject);
    procedure SaveMdiEditClick(Sender: TObject);
    procedure FontMdiEditClick(Sender: TObject);
    procedure CloseMdiEditClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure PrintMdiEditClick(Sender: TObject);
    procedure FindMdiEditClick(Sender: TObject);
    procedure ReplaceMdiEditClick(Sender: TObject);
    procedure FindDialogMdiEditFind(Sender: TObject);
    procedure ReplaceDialogMdiEditReplace(Sender: TObject);
    procedure ReplaceDialogMdiEditFind(Sender: TObject);
    procedure PrinterSetupMdiEditClick(Sender: TObject);
    procedure NewMdiEditClick(Sender: TObject);
    procedure OpenMdiEditClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
    CurrentFileName: string;    
    procedure Open(const AFileName: string);
  end;

var
  EditForm: TEditForm;

const
  DefaultFileName = 'Untitled';

implementation

uses Clipbrd, Printers, Main;

{$R *.DFM}

procedure TEditForm.AlignClick(Sender: TObject);
begin
  LeftMdiEdit.Checked := False;
  RightMdiEdit.Checked := False;
  CenterMdiEdit.Checked := False;
  with Sender as TMenuItem do Checked := True;
  with Editor.Paragraph do
    if LeftMdiEdit.Checked then
      Alignment := taLeftJustify
    else if RightMdiEdit.Checked then
      Alignment := taRightJustify
    else if CenterMdiEdit.Checked then
      Alignment := taCenter;
end;

procedure TEditForm.WordwrapMdiEditClick(Sender: TObject);
begin
  with Editor do
  begin
    WordWrap := not WordWrap; { toggle word wrapping }
    if WordWrap then
      ScrollBars := ssVertical
    else
      ScrollBars := ssBoth;
    WordWrapMdiEdit.Checked := WordWrap; { set menu item check }
  end;
end;

procedure TEditForm.CutMdiEditClick(Sender: TObject);
begin
  Editor.CutToClipboard;
end;

procedure TEditForm.CopyMdiEditClick(Sender: TObject);
begin
  Editor.CopyToClipboard;
end;

procedure TEditForm.PasteMdiEditClick(Sender: TObject);
begin
  Editor.PasteFromClipboard;
end;

procedure TEditForm.SelectallMdiEditClick(Sender: TObject);
begin
  Editor.SelectAll;
end;

procedure TEditForm.DeleteMdiEditClick(Sender: TObject);
begin
  Editor.ClearSelection;
end;

procedure TEditForm.EditMdiEditClick(Sender: TObject);
var
  HasSelection: Boolean;
begin
  PasteMdiEdit.Enabled := Clipboard.HasFormat(CF_TEXT);
  PastePopup.Enabled := PasteMdiEdit.Enabled;
  HasSelection := Editor.SelLength > 0;
  CutMdiEdit.Enabled := HasSelection;
  CutPopup.Enabled := HasSelection;
  CopyMdiEdit.Enabled := HasSelection;
  CopyPopup.Enabled := HasSelection;
  DeleteMdiEdit.Enabled := HasSelection;
end;

procedure TEditForm.Open(const AFileName: string);
begin
  CurrentFileName := AFileName;
  Caption := ExtractFileName(AFileName);
  with Editor do
  begin
    Lines.LoadFromFile(CurrentFileName);
    SelStart := 0;
    Modified := False;
  end;
end;

procedure TEditForm.SaveasMdiEditClick(Sender: TObject);
begin
  SaveFileDialogMdiEdit.FileName := CurrentFileName;
  if SaveFileDialogMdiEdit.Execute then
  begin
    CurrentFileName := SaveFileDialogMdiEdit.FileName;
    Caption := ExtractFileName(CurrentFileName);
    SaveMdiEditClick(Sender);
  end;
end;

procedure TEditForm.SaveMdiEditClick(Sender: TObject);
begin
  if CurrentFileName = DefaultFileName then
    SaveAsMdiEditClick(Sender)
  else
  begin
    Editor.Lines.SaveToFile(CurrentFileName);
    Editor.Modified := False;
  end;
end;

procedure TEditForm.FontMdiEditClick(Sender: TObject);
begin
  FontDialogMdiEdit.Font := Editor.Font;
  if FontDialogMdiEdit.Execute then
    Editor.SelAttributes.Assign(FontDialogMdiEdit.Font);
end;

procedure TEditForm.CloseMdiEditClick(Sender: TObject);
begin
  Close;
end;

procedure TEditForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TEditForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
const
  SWarningText = 'Save changes to %s?';
begin
  if Editor.Modified then
  begin
    case MessageDlg(Format(SWarningText, [CurrentFileName]), mtConfirmation,
      [mbYes, mbNo, mbCancel], 0) of
      idYes: SaveMdiEditClick(Self);
      idCancel: CanClose := False;
    end;
  end;
end;

procedure TEditForm.FormCreate(Sender: TObject);
begin
  CurrentFileName := DefaultFileName;
end;

procedure TEditForm.PrintMdiEditClick(Sender: TObject);
var
DistanceLine,Line:Integer;
begin
if PrintDialogMdiEdit.Execute then
begin
Printer.Canvas.font:=Editor.Font;
DistanceLine:=Trunc(1.5*FontDialogMdiEdit.font.size);
Printer.BeginDoc;
for line:=0 to Editor.Lines.Count-1 do
begin
Printer.canvas.textout(0,DistanceLine*Line,Editor.lines[Line]);
end;
Printer.EndDoc;
end;
end;

procedure TEditForm.FindMdiEditClick(Sender: TObject);
begin
   FindDialogMdiEdit.Execute;
end;

procedure TEditForm.ReplaceMdiEditClick(Sender: TObject);
begin
   ReplaceDialogMdiEdit.Execute;
end;

procedure TEditForm.FindDialogMdiEditFind(Sender: TObject);
var
FoundAt:LongInt;
StartPos, ToEnd:Integer;
begin
with Sender as TFindDialog do
with Editor do
  begin
    if (SelLength <> 0) Then
       if AnsiCompareStr(SelText,FindDialogMdiEdit.FindText)=0 Then
       begin
       StartPos := SelStart + SelLength;
       ToEnd := Length(Text) - StartPos;
       end
       Else
       begin
       StartPos := SelStart;
       ToEnd := SelLength;
       End
    else
       begin
       StartPos := 0;
       ToEnd := Length(Text);
       end;

    if (frMatchCase in FindDialogMdiEdit.Options) And (frWholeWord in FindDialogMdiEdit.Options) Then
       FoundAt := FindText(FindDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord, stMatchCase])
    else if (frMatchCase in FindDialogMdiEdit.Options) Then
       FoundAt := FindText(FindDialogMdiEdit.FindText, StartPos, ToEnd, [stMatchCase])
    else if (frWholeWord in FindDialogMdiEdit.Options) Then
       FoundAt := FindText(FindDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord])
    else
       FoundAt := FindText(FindDialogMdiEdit.FindText, StartPos, ToEnd, []);

    if FoundAt <> -1 then
    begin
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialogMdiEdit.FindText);
    end
    else
      ShowMessage('Cannot Find This String');
   end;
end;


procedure TEditForm.ReplaceDialogMdiEditReplace(Sender: TObject);
var
FoundAt:LongInt;
StartPos, ToEnd: Integer;
begin
with ReplaceDialogMdiEdit do
with Editor do
  begin
    if SelLength <> 0 then
      begin
        StartPos := SelStart;
        ToEnd := SelLength;
      end
      else
      begin
        StartPos := 0;
        ToEnd := Length(Text);
      End;
    if (frMatchCase in ReplaceDialogMdiEdit.Options) And (frWholeWord in FindDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord, stMatchCase])
    else if (frMatchCase in ReplaceDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stMatchCase])
    else if (frWholeWord in ReplaceDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord])
    else
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, []);
    If (FoundAt<>-1) and (frReplace in ReplaceDialogMdiEdit.Options) Then
       begin
       SelStart := FoundAt;
       SelLength := Length(ReplaceDialogMdiEdit.FindText);
       SelText:=ReplaceDialogMdiEdit.ReplaceText;
       end;
    while (FoundAt<>-1) and (frReplaceAll in ReplaceDialogMdiEdit.Options) do
    begin
         SetFocus;
         SelStart := FoundAt;
         SelLength := Length(ReplaceDialogMdiEdit.FindText);
         SelText:=ReplaceDialogMdiEdit.ReplaceText;
         ToEnd :=ToEnd - FoundAt + StartPos-Length(ReplaceDialogMdiEdit.ReplaceText)+Length(ReplaceDialogMdiEdit.FindText);
         StartPos := FoundAt+Length(ReplaceDialogMdiEdit.ReplaceText);
         if (frMatchCase in ReplaceDialogMdiEdit.Options) And (frWholeWord in FindDialogMdiEdit.Options) Then
            FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord, stMatchCase])
         else if (frMatchCase in ReplaceDialogMdiEdit.Options) Then
            FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stMatchCase])
         else if (frWholeWord in ReplaceDialogMdiEdit.Options) Then
            FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord])
         else
            FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [])
    end;
    if (FoundAt=-1) and ( (frReplace in ReplaceDialogMdiEdit.Options) or (frReplaceAll in ReplaceDialogMdiEdit.Options) ) then
        ShowMessage('Cannot Find This String');
  end;
end;

procedure TEditForm.ReplaceDialogMdiEditFind(Sender: TObject);
Var
FoundAt:LongInt;
StartPos, ToEnd:Integer;
begin
with Sender as TReplaceDialog do
with Editor do
  begin
    if (SelLength <> 0) Then
       if AnsiCompareStr(SelText,ReplaceDialogMdiEdit.FindText)=0 Then
       begin
       StartPos := SelStart + SelLength;
       ToEnd := Length(Text) - StartPos;
       end
       Else
       begin
       StartPos := SelStart;
       ToEnd := SelLength;
       End
    else
       begin
       StartPos := 0;
       ToEnd := Length(Text);
       end;

    if (frMatchCase in ReplaceDialogMdiEdit.Options) And (frWholeWord in FindDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord, stMatchCase])
    else if (frMatchCase in ReplaceDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stMatchCase])
    else if (frWholeWord in ReplaceDialogMdiEdit.Options) Then
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [stWholeWord])
    else
       FoundAt := FindText(ReplaceDialogMdiEdit.FindText, StartPos, ToEnd, [])
    end;

    if FoundAt <> -1 then
    begin
      SetFocus;
      Editor.SelStart := FoundAt;
      Editor.SelLength := Length(ReplaceDialogMdiEdit.FindText);
    end
    else
      ShowMessage('Cannot Find This String');

end;

procedure TEditForm.PrinterSetupMdiEditClick(Sender: TObject);
begin
        PrinterSetupDialogMdiEdit.Execute
end;

procedure TEditForm.NewMdiEditClick(Sender: TObject);
begin
        MainForm.FileNew(EditForm);
end;

procedure TEditForm.OpenMdiEditClick(Sender: TObject);
begin
  MainForm.FileOpen(EditForm);
end;

end.

⌨️ 快捷键说明

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