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

📄 editor.pas

📁 《Kylix程序设计》一书中附带的例程源代码
💻 PAS
字号:
unit Editor;interfaceuses  SysUtils, Types, Classes, Variants, QGraphics, QControls, QForms, QDialogs,  QExtCtrls, QComCtrls, QStdCtrls, QTypes, QMenus, QImgList;type  TFrmEditor = class(TForm)    Memo: TMemo;    MainMenu: TMainMenu;    MnuFile: TMenuItem;    MnuEdit: TMenuItem;    MnuHelp: TMenuItem;    MnuItmFileNew: TMenuItem;    MnuItmFileOpen: TMenuItem;    N1: TMenuItem;    MnuItmFileSave: TMenuItem;    MnuItmFileSaveAs: TMenuItem;    N2: TMenuItem;    MnuItmFileExit: TMenuItem;    MnuItmEditCut: TMenuItem;    MnuItmEditCopy: TMenuItem;    MnuItmEditPaste: TMenuItem;    MnuItmEditDelete: TMenuItem;    MnuItmEditSelectAll: TMenuItem;    MnuItmHelpAbout: TMenuItem;    MnuOptions: TMenuItem;    MnuItmOptionsFont: TMenuItem;    MnuSearch: TMenuItem;    MnuItmSearchFind: TMenuItem;    MnuItmSearchReplace: TMenuItem;    FindDialog: TFindDialog;    ReplaceDialog: TReplaceDialog;    FontDialog: TFontDialog;    SaveDialog: TSaveDialog;    OpenDialog: TOpenDialog;    StatusBar: TStatusBar;    ImageList: TImageList;    ToolBar: TToolBar;    TolBtnNew: TToolButton;    TolBtnOpen: TToolButton;    TolBtnSave: TToolButton;    TolBtnExit: TToolButton;    ToolButton5: TToolButton;    TolBtnCut: TToolButton;    TolBtnCopy: TToolButton;    TolBtnPaste: TToolButton;    ToolButton9: TToolButton;    TolBtnFind: TToolButton;    TolBtnReplace: TToolButton;    ToolButton12: TToolButton;    TolBtnFont: TToolButton;    procedure MnuItmFileExitClick(Sender: TObject);    procedure MnuItmEditCopyClick(Sender: TObject);    procedure MnuItmEditCutClick(Sender: TObject);    procedure MnuItmEditPasteClick(Sender: TObject);    procedure MnuItmEditDeleteClick(Sender: TObject);    procedure MnuItmEditSelectAllClick(Sender: TObject);    procedure MnuItmOptionsFontClick(Sender: TObject);    procedure MnuItmSearchFindClick(Sender: TObject);    procedure MnuItmSearchReplaceClick(Sender: TObject);    procedure MnuItmFileNewClick(Sender: TObject);    procedure MnuItmFileOpenClick(Sender: TObject);    procedure MnuItmFileSaveClick(Sender: TObject);    procedure MnuItmFileSaveAsClick(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);    procedure FindDialogFind(Sender: TObject);    procedure ReplaceDialogFind(Sender: TObject);    procedure ReplaceDialogReplace(Sender: TObject);    procedure MnuItmHelpAboutClick(Sender: TObject);  private    { Private declarations }    FFileName: string;    FCaptionDef: string;  public    { Public declarations }    function GetFileName(): string;  end;var  FrmEditor: TFrmEditor;implementationuses About, Splash;{$R *.xfm}procedure TFrmEditor.MnuItmFileExitClick(Sender: TObject);begin  Close();end;procedure TFrmEditor.MnuItmEditCopyClick(Sender: TObject);begin  Memo.CopyToClipboard();end;procedure TFrmEditor.MnuItmEditCutClick(Sender: TObject);begin  Memo.CutToClipboard();end;procedure TFrmEditor.MnuItmEditPasteClick(Sender: TObject);begin  Memo.PasteFromClipboard();end;procedure TFrmEditor.MnuItmEditDeleteClick(Sender: TObject);begin  Memo.ClearSelection();end;procedure TFrmEditor.MnuItmEditSelectAllClick(Sender: TObject);begin  Memo.SelectAll();end;procedure TFrmEditor.MnuItmOptionsFontClick(Sender: TObject);begin  FontDialog.Font.Assign( Memo.Font );  if FontDialog.Execute() then    Memo.Font.Assign( FontDialog.Font );end;procedure TFrmEditor.MnuItmSearchFindClick(Sender: TObject);begin  FindDialog.Execute();end;procedure TFrmEditor.MnuItmSearchReplaceClick(Sender: TObject);begin  ReplaceDialog.Execute();end;procedure TFrmEditor.MnuItmFileNewClick(Sender: TObject);begin  FFileName := 'Untitle.txt';  Caption := FCaptionDef + ': ' + FFileName;  Memo.Clear();end;function TFrmEditor.GetFileName: string;begin  Result := FFileName;end;procedure TFrmEditor.MnuItmFileOpenClick(Sender: TObject);begin  if OpenDialog.Execute() then  begin    FFileName := OpenDialog.FileName;    Caption := FCaptionDef + ': ' + FFileName;    Memo.Clear();    Memo.Lines.LoadFromFile( FFileName );    Memo.SetFocus();    Memo.Modified := false;    Memo.ReadOnly := false;  end;end;procedure TFrmEditor.MnuItmFileSaveClick(Sender: TObject);begin  if Pos( 'Untitle', FFileName ) <> 0 then    MnuItmFileSaveAsClick( Sender )  else  begin    Memo.Lines.SaveToFile( FFileName );    Memo.Modified := false;  end;end;procedure TFrmEditor.MnuItmFileSaveAsClick(Sender: TObject);begin  SaveDialog.Title := 'Save As...';  if SaveDialog.Execute() then  begin    Memo.Lines.SaveToFile( FFileName );    FFileName := SaveDialog.FileName;    Caption := FCaptionDef + ': ' + FFileName;    Memo.Modified := false;  end;end;procedure TFrmEditor.FormCreate(Sender: TObject);{var  i: Integer;  FrmSplash: TFrmSplash;}begin  FCaptionDef := 'Text Editor';  FFileName := 'Untitle.txt';  Caption := FCaptionDef + ': ' + FFileName;{  FrmSplash := TFrmSplash.Create( Application );//  FrmSplash.FormStyle := fsStayOnTop;  FrmSplash.Show();  FrmSplash.Update();  FrmSplash.TimerDelay.Enabled := true;}end;procedure TFrmEditor.FormCloseQuery(Sender: TObject;  var CanClose: Boolean);var  ReturnBtn: TMessageButton;begin  if Memo.Modified then  begin    ReturnBtn := Application.MessageBox(      'File has been modified. Save it?',      'Warning',      [ smbYes, smbNo, smbCancel ],      smsWarning,      smbYes,      smbCancel );    if ReturnBtn = smbYes then    begin      MnuItmFileSaveClick( Sender );      exit;    end;    if ReturnBtn = smbNo then    begin      exit;    end;    if ReturnBtn = smbCancel then    begin      CanClose := false;    end;  end;end;procedure TFrmEditor.FindDialogFind(Sender: TObject);var  i, j: Integer;  PosReturn, SkipChars: Integer;begin  for i := 0 to Memo.Lines.Count do  begin    PosReturn := Pos( FindDialog.FindText, Memo.Lines[ i ] );    if PosReturn <> 0 then    begin      SkipChars := 0;      for j := 0 to i - 1 do      begin        SkipChars := SkipChars + Length( Memo.Lines[ i ] );      end;      SkipChars := SkipChars + ( i * 2 );      SkipChars := SkipChars + PosReturn - 1;      Memo.SetFocus();      Memo.SelStart := SkipChars;      Memo.SelLength := Length( FindDialog.FindText );      break;    end;  end;end;procedure TFrmEditor.ReplaceDialogFind(Sender: TObject);var  i, j: Integer;  PosReturn, SkipChars: Integer;begin  for i := 0 to Memo.Lines.Count do  begin    PosReturn := Pos( ReplaceDialog.FindText, Memo.Lines[ i ] );    if PosReturn <> 0 then    begin      SkipChars := 0;      for j := 0 to i - 1 do      begin        SkipChars := SkipChars + Length( Memo.Lines[ i ] );      end;      SkipChars := SkipChars + ( i * 2 );      SkipChars := SkipChars + PosReturn - 1;      Memo.SetFocus();      Memo.SelStart := SkipChars;      Memo.SelLength := Length( ReplaceDialog.FindText );      break;    end;  end;end;procedure TFrmEditor.ReplaceDialogReplace(Sender: TObject);begin  Memo.SelText := ReplaceDialog.ReplaceText;end;procedure TFrmEditor.MnuItmHelpAboutClick(Sender: TObject);var  AboutBox: TAboutBox;begin  AboutBox := TAboutBox.Create( Application );  try    ABoutBox.ShowModal();  finally    AboutBox.Free();    AboutBox := nil;  end;end;end.

⌨️ 快捷键说明

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