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

📄 syneditactions.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{-------------------------------------------------------------------------------

   单元: SynEditActions.pas

   作者: 姚乔锋

   日期: 2004.11.26

   说明: 一些关于SynEdit的动作

   版本: 1.00

-------------------------------------------------------------------------------}


unit SynEditActions;

interface

{$I Synedit.inc}

uses
  Windows, Classes, Clipbrd, Forms, Controls, SysUtils, Dialogs, Graphics,
  SynEdit, SynMemo, SynEditTextBuffer, SynEditHighlighter, SynEditPrint,
  SynEditExport, SynEditTypes, SynEditKeyCmds, SynEditMiscClasses, ActnList,
  SynEditMiscProcs, SynMsgDialog, SynEditStrRes, SynEditSearcher, SynEditor,
  SynExportHTML, SynExportRTF, SynExportTeX, SynUniHighlighter, Printers,
  SynEditSource, IniFiles, SynCompletionProposal,
  SynUniFormatNativeXml20, SimpleXML, SynUniFormatNativeXml,
  {$IFDEF SPELLCHECK}
  SynSpellCheck,
  {$ENDIF}
  SynAutoCorrect;

type

  TSynCustomManager = class;

  TSynHighlighterItem = class(TCollectionItem)
  private
    FHighlighter: TSynCustomHighlighter;
    FCodeTemplate: TSynAutoComplete;
    FCodeInsight : TSynCompletionProposal;
    FFileName: string;
    FLoad : Boolean;
    FFullFileName : string;
    procedure SetHighlighter(const Value: TSynCustomHighlighter);
    procedure setCodeTemplate(const Value: TSynAutoComplete);
    procedure setCodeInsight(const Value: TSynCompletionProposal);
  protected
    function GetDisplayName: string; override;
  public
    procedure Assign(Source: TPersistent); override;
    procedure Load;
  published
    property FileName : string read FFileName write FFilename;
    property CodeInsight : TSynCompletionProposal read fCodeInsight write setCodeInsight;
    property CodeTemplate : TSynAutoComplete read fCodeTemplate write setCodeTemplate;
    property Highlighter : TSynCustomHighlighter read FHighlighter write SetHighlighter;
  end;

  TSynHighlighters = class(TCollection)
  private
    FManager : TSynCustomManager;
    FDefaultLanguage: string;
    function GetHighlighter(Index: Integer): TSynCustomHighlighter;
    procedure SetHighlighter(Index: Integer;
      const Value: TSynCustomHighlighter);
    function GetDefaultLanguageIndex: Integer;
    function GetItem(Index: Integer): TSynHighlighterItem;
    procedure SetItem(Index: Integer; const Value: TSynHighlighterItem);
  public
    procedure HighlighterAssignTo(Editor : TCustomSynEdit; NewIndex : Integer);
    function IndexOfFileName(FileName : string): Integer;
    function IndexOfLanguage(Language : string): Integer;
    procedure RemoveHighlighter(Highlighter: TSynCustomHighlighter);
    property Items[Index: Integer]: TSynHighlighterItem read GetItem write SetItem;
    property Highlighters[Index: Integer]: TSynCustomHighlighter read GetHighlighter write SetHighlighter;
    property DefaultLanguageIndex: Integer read GetDefaultLanguageIndex;
  published
    property DefaultLanguage: string read FDefaultLanguage write FDefaultLanguage;
  end;

  TSynManagerEditorEvent = procedure(Sender : TObject; index : Integer) of object;
  TSynManagerCreateIniEvent = procedure(Sender : TObject; const FileName : string;
    var Ini : TCustomIniFile) of object;

  TSynCustomManager = class(TComponent)
  private
    FSynEditors : TStrings;
    FOnAddEditor : TSynManagerEditorEvent;
    FOnDeleteEditor : TSynManagerEditorEvent;
    FSynEditor: TCustomSynEditor;

    FHighlighters: TSynHighlighters;
    FHighlightersPath: string;

    FFilter: string;

    fAutoCorrect : TSynAutoCorrect;
    FAutoCorrectIni : string;
    fAutoCorrectLoad : Boolean;

    FEditorSourceIni: string;
    FEditorSource: TSynEditSource;
    fEditorSourceLoad : Boolean;

    fOnCreateIniFile: TSynManagerCreateIniEvent;

    {$IFDEF SPELLCHECK}
    FSpellCheckIni: string;
    fSpellCheck : TSynSpellCheck;
    fSpellCheckLoad : Boolean;
    {$ENDIF}

    FLoaded : Boolean;
    FAutoLoad: Boolean;
    FAutoSave: Boolean;

    function GetSynEditorCount: integer;
    function GetSynEditors(Index: integer): TCustomSynEditor;
    procedure SetSynEditor(const Value: TCustomSynEditor);
    procedure SetEditorSource(const Value: TSynEditSource);
    procedure SetHighlighters(const Value: TSynHighlighters);
    procedure SetAutoCorrect(const Value: TSynAutoCorrect);
    {$IFDEF SPELLCHECK}
    procedure SetSpellCheck(const Value: TSynSpellCheck);
    {$ENDIF}
  protected
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    procedure Loaded; override;
  public
    constructor Create(AOwner : TComponent); override;
    procedure BeforeDestruction; override;
    destructor Destroy; override;

    property AutoLoad : Boolean read FAutoLoad write FAutoLoad;
    property AutoSave : Boolean read FAutoSave write FAutoSave;

    property AutoCorrect : TSynAutoCorrect read fAutoCorrect write SetAutoCorrect;
    {$IFDEF SPELLCHECK}
    property SpellCheck : TSynSpellCheck read fSpellCheck write SetSpellCheck;
    {$ENDIF}
    property SynEditor : TCustomSynEditor read FSynEditor write SetSynEditor;
    property EditorSource : TSynEditSource read FEditorSource write SetEditorSource;
    property Highlighters : TSynHighlighters read FHighlighters write SetHighlighters;

    function GetFilters: string;
    property Filter : string read FFilter write FFilter;

    property Editors[Index : integer] : TCustomSynEditor read GetSynEditors;
    property EditorCount : integer read GetSynEditorCount;
    function AddEditor(SynEditor : TCustomSynEditor): integer;
    procedure DeleteEditor(SynEditor : TCustomSynEditor);
    property OnAddEditor : TSynManagerEditorEvent read FOnAddEditor write FOnAddEditor;
    property OnDeleteEditor : TSynManagerEditorEvent read FOnDeleteEditor write FOnDeleteEditor;

    procedure Load;
    procedure Save;
    function CreateIniFile(FileName : string) : TCustomIniFile;
    property HighlightersPath: string read FHighlightersPath write FHighlightersPath;
    procedure SaveHighlighters(Dir : string);
    procedure LoadHighlighters(Dir : string);
    property EditorSourceIni: string read FEditorSourceIni write FEditorSourceIni;
    procedure SaveEditorSource(FileName : string);
    procedure LoadEditorSource(FileName : string);
    property AutoCorrectIni: string read FAutoCorrectIni write FAutoCorrectIni;
    procedure SaveAutoCorrect(FileName : string);
    procedure LoadAutoCorrect(FileName : string);
    {$IFDEF SPELLCHECK}
    property SpellCheckIni: string read FSpellCheckIni write FSpellCheckIni;
    procedure SaveSpellCheck(FileName : string);
    procedure LoadSpellCheck(FileName : string);
    {$ENDIF}
    property OnCreateIniFile : TSynManagerCreateIniEvent read fOnCreateIniFile write fOnCreateIniFile;
  end;

  TSynManager = class(TSynCustomManager)
  published
    property AutoLoad;
    property AutoSave;
    property AutoCorrect;
    property AutoCorrectIni;
    {$IFDEF SPELLCHECK}
    property SpellCheck;
    property SpellCheckIni;
    {$ENDIF}
    property Highlighters;
    property HighlightersPath;
    property EditorSource;
    property EditorSourceIni;
    property Filter;
    property SynEditor;
    property OnAddEditor;
    property OnDeleteEditor;
    property OnCreateIniFile;
  end;

  TSynBaseAction = class(TCustomAction)
  public
    constructor Create(AOwner: TComponent); override;
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure UpdateTarget(Target: TObject); override;
  published
    property AutoCheck;
    property Caption;
    property Checked;
    property Enabled;
    property GroupIndex;
    property HelpContext;
    property HelpKeyword;
    property HelpType;
    property Hint;
    property ImageIndex;
    property ShortCut;
    property SecondaryShortCuts;
    property Visible;
    property OnHint;
  end;

  TSynCustomAction = class(TSynBaseAction)
  private
    FSynEdit: TCustomSynEditor;
    procedure SetSynEdit(const Value: TCustomSynEditor);
  protected
    FActiveSynEdit : TCustomSynEditor;
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    function SynEditAllocated(Target: TObject) : Boolean;
  public
    function HandlesTarget(Target: TObject): Boolean; override;
  published
    property SynEdit : TCustomSynEditor read FSynEdit write SetSynEdit;
  end;

  TSynAction = class(TAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TSynEditExecuteEvent =
    procedure(Sender : TObject; SynEdit : TCustomSynEdit) of object;

  TSynEditUpdateEvent =
    function (Sender : TObject; SynEdit : TCustomSynEdit): Boolean of object;

  TSynEditAction = class(TSynCustomAction)
  private
    FOnExecute: TSynEditExecuteEvent;
    FOnUpdate: TSynEditUpdateEvent;
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  published
    property OnUpdate : TSynEditUpdateEvent read FOnUpdate write FOnUpdate;
    property OnExecute : TSynEditExecuteEvent read FOnExecute write FOnExecute;
  end;

  TSynChangeAction = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
  end;

  TSynChangeSelectAction = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
  end;

  TaSynReadOnly = class(TSynCustomAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynNormalSelect = class(TSynCustomAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynColumnSelect = class(TSynCustomAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynLineSelect = class(TSynCustomAction)
  public
    procedure UpdateTarget(Target: TObject); override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //说明 执行synedit的undo(撒消)功能
  TaSynUndo = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //说明 执行synedit的redo(重做)功能
  TaSynRedo = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //说明 执行synedit的Cut(剪切)功能
  TaSynCut = class(TSynChangeSelectAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynAppendCut = class(TSynChangeSelectAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //说明 执行synedit的Copy(复制)功能
  TaSynCopy = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynAppendCopy = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //说明 执行synedit的Paste(粘贴)功能
  TaSynPaste = class(TSynCustomAction)
  public
    function HandlesTarget(Target: TObject): Boolean; override;
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除下一个字符,相当于按delete键
  TaSynDeleteNextchar = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除上一个字符,相当于按BackSpace键
  TaSynDeleteLastChar = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除到当前词的词尾处
  TaSynDeleteWordToEnd = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除到当前词的词首处
  TaSynDeleteWordToStart = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除当前光标处的词
  TaSynDeleteWord = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除到当前行的行尾处
  TaSynDeleteLineToEnd = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除到当前行的行首处
  TaSynDeleteLineToStart = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //删除当前光标处的行
  TaSynDeleteLine = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //清除全部内容
  TaSynClearAll = class(TSynChangeAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择全部
  TaSynSelectAll = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择当前行
  TaSynSelectLine = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择下一行
  TaSynSelectNextLine = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择上一行
  TaSynSelectLastLine = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择当前光标处的词
  TaSynSelectWrod = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择光标后下一个词
  TaSynSelectNextWord = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  //选择光标前上一个词
  TaSynSelectLastWord = class(TSynCustomAction)
  public
    procedure ExecuteTarget(Target: TObject); override;
  end;

  TaSynGotoBookmark = class(TSynCustomAction)
  private
    fBookmark: Integer;
  public

⌨️ 快捷键说明

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