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

📄 dmain.pas

📁 Delphi编写的一个支持语法高亮显示和很多语言的文本编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit dMain;

interface

uses
  Windows,umyReg,math, ClipBrd, Forms, SysUtils, ShellAPI, Classes, SynExportRTF, SynEditExport, SynExportHTML,
  SynHighlighterMulti, SynHighlighterCPM, SynHighlighterProgress, uTypes,
  SynHighlighterGalaxy, SynHighlighterBaan, SynHighlighterInno,
  SynHighlighterIni, SynHighlighterDfm, SynHighlighterSml,
  SynHighlighterModelica, SynHighlighterDml, SynHighlighterHP48,
  SynHighlighterHC11, SynHighlighterAsm, SynHighlighterADSP21xx,
  SynHighlighterSDD, SynHighlighterSQL, SynHighlighterFoxpro,
  SynHighlighterCache, SynHighlighterCAC, SynHighlighterGWS,
  SynHighlighterTclTk, SynHighlighterPython, SynHighlighterPerl,
  SynHighlighterKix, SynHighlighterBat, SynHighlighterAWK,
  SynHighlighterVBScript, SynHighlighterPHP, SynHighlighterJScript,
  SynHighlighterHtml, SynHighlighterCss, SynHighlighterVB,
  SynHighlighterPas, SynHighlighterM3, SynHighlighterJava,
  SynHighlighterGeneral, SynHighlighterFortran, SynEditHighlighter,
  SynHighlighterCpp, Dialogs, SynCompletionProposal, SynHighlighterUnreal,
  SynHighlighterIDL, SynHighlighterMsg, SynHighlighterXML, SynSpellCheck, Menus,
  SynEditPlugins, SynMacroRecorder, ImgList, Controls, ShlObj,
  SynHighlighterMPerl, SynHighlighterRuby, SynHighlighterUNIXShellScript,
  SynHighlighterTeX, ActnList, fDoc, fWeb,SynEditKeyCmds,
  SynEditMiscClasses, SynEditSearch, fGoto,
  SynHighlighterAny, HexEditor, inifiles, strUtils, ComCtrls, SynEditRegexSearch,
  SynAutoCorrect, SynEditPrint, SynEditTextBuffer, SynExportXHTML;

type
  TdmMain = class(TDataModule)
    synHTML: TSynMultiSyn;
    synExportHTML: TSynExporterHTML;
    synExportRTF: TSynExporterRTF;
    dlgFileSave: TSaveDialog;
    dlgFileOpen: TOpenDialog;
    synRecord: TSynMacroRecorder;
    imlShellIcon: TImageList;
    imgDoc: TImageList;
    synSpell: TSynSpellCheck;
    actMain: TActionList;
    actFileNew: TAction;
    actFileOpen: TAction;
    actFileClose: TAction;
    actFileSave: TAction;
    actFileSaveAs: TAction;
    actFileSaveAll: TAction;
    actFileShowInBrowser: TAction;
    actFileExportHTML: TAction;
    actFileExportRTF: TAction;
    actFileOpenFTP: TAction;
    actFileSaveFTP: TAction;
    actFilePrintSetup: TAction;
    actFilePrintPreview: TAction;
    actFilePrint: TAction;
    actFileProperties: TAction;
    actFileExit: TAction;
    actFileRecent: TAction;
    actFileOpenFromInternet: TAction;
    actFileCloseAll: TAction;
    imgMain: TImageList;
    actEditUndo: TAction;
    actEditRedo: TAction;
    actEditCut: TAction;
    actEditAppendCut: TAction;
    actEditAppendCopy: TAction;
    actEditPaste: TAction;
    actEditDelete: TAction;
    actEditSelectAll: TAction;
    actEditHex: TAction;
    actEditCheckSpelling: TAction;
    actEditInsertFromFile: TAction;
    actEditModified: TAction;
    actEditReadOnly: TAction;
    actEditCopy: TAction;
    actEditInsertDateTime: TAction;
    imlShellLarge: TImageList;
    actGoto0: TAction;
    actGoto1: TAction;
    actGoto2: TAction;
    actGoto3: TAction;
    actGoto4: TAction;
    actGoto5: TAction;
    actGoto6: TAction;
    actGoto7: TAction;
    actGoto8: TAction;
    actGoto9: TAction;
    actToggle0: TAction;
    actToggle1: TAction;
    actToggle2: TAction;
    actToggle3: TAction;
    actToggle4: TAction;
    actToggle5: TAction;
    actToggle6: TAction;
    actToggle7: TAction;
    actToggle8: TAction;
    actToggle9: TAction;
    actViewPrefrences: TAction;
    actHelpAbout: TAction;
    actFindFind: TAction;
    actFindNext: TAction;
    actFindPrevious: TAction;
    actFindReplace: TAction;
    actFindGoto: TAction;
    actBuildCompile: TAction;
    actFormatTabsToSpaces: TAction;
    actFormatSpacesToTabs: TAction;
    actFormatLeadingTabsToSpaces: TAction;
    actFormatLeadingSpacesToTabs: TAction;
    actFormatOEMToAnsi: TAction;
    actFormatAnsiToOEM: TAction;
    actFormatEncoding: TAction;
    actFormatTrimTrailingSpaces: TAction;
    actCaseUpper: TAction;
    actCaseLower: TAction;
    actCaseInvert: TAction;
    actCaseCapitalize: TAction;
    actCaseSentensize: TAction;
    actBlockTabRight: TAction;
    actBlockTabLeft: TAction;
    actAdvancedDeleteLines: TAction;
    actAdvancedDeleteToEOL: TAction;
    actAdvancedDeleteToBOL: TAction;
    actAdvancedDeleteWord: TAction;
    actAdvancedSelectLine: TAction;
    actAdvancedSelectToEOL: TAction;
    actAdvancedSelectToBOL: TAction;
    actAdvancedSelectWord: TAction;
    actAdvancedJoinLines: TAction;
    actAdvancedSplitLine: TAction;
    actAdvancedDuplicateLine: TAction;
    actAdvancedFormatLines: TAction;
    propose: TSynCompletionProposal;
    imgPropose: TImageList;
    actFindPrevLine: TAction;
    actFindNextLine: TAction;
    actFindFindInFiles: TAction;
    actFileShowInExternalBrowser: TAction;
    SynCppSyn1: TSynCppSyn;
    SynFortranSyn1: TSynFortranSyn;
    SynGeneralSyn1: TSynGeneralSyn;
    SynJavaSyn1: TSynJavaSyn;
    SynM3Syn1: TSynM3Syn;
    SynPasSyn1: TSynPasSyn;
    SynVBSyn1: TSynVBSyn;
    SynCssSyn1: TSynCssSyn;
    SynHTMLSyn1: TSynHTMLSyn;
    SynJScriptSyn1: TSynJScriptSyn;
    SynPHPSyn1: TSynPHPSyn;
    SynVBScriptSyn1: TSynVBScriptSyn;
    SynAWKSyn1: TSynAWKSyn;
    SynBatSyn1: TSynBatSyn;
    SynKixSyn1: TSynKixSyn;
    SynPythonSyn1: TSynPythonSyn;
    SynTclTkSyn1: TSynTclTkSyn;
    SynGWScriptSyn1: TSynGWScriptSyn;
    SynCACSyn1: TSynCACSyn;
    SynCacheSyn1: TSynCacheSyn;
    SynFoxproSyn1: TSynFoxproSyn;
    SynSQLSyn1: TSynSQLSyn;
    SynSDDSyn1: TSynSDDSyn;
    SynADSP21xxSyn1: TSynADSP21xxSyn;
    SynAsmSyn1: TSynAsmSyn;
    SynHC11Syn1: TSynHC11Syn;
    SynHP48Syn1: TSynHP48Syn;
    SynDmlSyn1: TSynDmlSyn;
    SynModelicaSyn1: TSynModelicaSyn;
    SynSMLSyn1: TSynSMLSyn;
    SynDfmSyn1: TSynDfmSyn;
    SynIniSyn1: TSynIniSyn;
    SynInnoSyn1: TSynInnoSyn;
    SynBaanSyn1: TSynBaanSyn;
    SynGalaxySyn1: TSynGalaxySyn;
    SynProgressSyn1: TSynProgressSyn;
    SynCPMSyn1: TSynCPMSyn;
    SynXMLSyn1: TSynXMLSyn;
    SynUnrealSyn1: TSynUnrealSyn;
    SynIdlSyn1: TSynIdlSyn;
    SynMsgSyn1: TSynMsgSyn;
    SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn;
    SynTeXSyn1: TSynTeXSyn;
    SynRubySyn1: TSynRubySyn;
    SynEditSearch: TSynEditSearch;
    SynAutoCorrect: TSynAutoCorrect;
    SynMPerlSyn1: TSynMPerlSyn;
    Print: TSynEditPrint;
    PrintDialog: TPrintDialog;
    actExportXML: TAction;
    procedure s(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
    procedure actFileNewExecute(Sender: TObject);
    procedure actFileCloseAllExecute(Sender: TObject);
    procedure actFileOpenExecute(Sender: TObject);
    procedure actFilePropertiesExecute(Sender: TObject);
    procedure actFileSaveExecute(Sender: TObject);
    procedure actFileSaveAsExecute(Sender: TObject);
    procedure actFileSaveAllExecute(Sender: TObject);
    procedure actFileShowInBrowserExecute(Sender: TObject);
    procedure actFileCloseExecute(Sender: TObject);
    procedure actFileExportHTMLExecute(Sender: TObject);
    procedure actFileExportRTFExecute(Sender: TObject);
    procedure actFileOpenFTPExecute(Sender: TObject);
    procedure actFileSaveFTPExecute(Sender: TObject);
    procedure actFileExitExecute(Sender: TObject);
    procedure actEditUndoExecute(Sender: TObject);
    procedure actEditRedoExecute(Sender: TObject);
    procedure actEditCutExecute(Sender: TObject);
    procedure actEditAppendCutExecute(Sender: TObject);
    procedure actEditCopyExecute(Sender: TObject);
    procedure actEditAppendCopyExecute(Sender: TObject);
    procedure actEditPasteExecute(Sender: TObject);
    procedure actEditDeleteExecute(Sender: TObject);
    procedure actEditModifiedExecute(Sender: TObject);
    procedure actEditReadOnlyExecute(Sender: TObject);
    procedure actEditSelectAllExecute(Sender: TObject);
    procedure actGoto0Execute(Sender: TObject);
    procedure actToggle0Execute(Sender: TObject);
    procedure actEditHexExecute(Sender: TObject);
    procedure actViewPrefrencesExecute(Sender: TObject);
    procedure actHelpAboutExecute(Sender: TObject);
    procedure actFindFindExecute(Sender: TObject);
    procedure actFindNextExecute(Sender: TObject);
    procedure actFindReplaceExecute(Sender: TObject);
    procedure actFindGotoExecute(Sender: TObject);
    procedure actFindPreviousExecute(Sender: TObject);
    procedure actBuildCompileExecute(Sender: TObject);
    procedure actFormatTabsToSpacesExecute(Sender: TObject);
    procedure actFormatSpacesToTabsExecute(Sender: TObject);
    procedure actFormatLeadingTabsToSpacesExecute(Sender: TObject);
    procedure actFormatLeadingSpacesToTabsExecute(Sender: TObject);
    procedure actFormatTrimTrailingSpacesExecute(Sender: TObject);
    procedure actFormatOEMToAnsiExecute(Sender: TObject);
    procedure actFormatAnsiToOEMExecute(Sender: TObject);
    procedure actCaseUpperExecute(Sender: TObject);
    procedure actCaseLowerExecute(Sender: TObject);
    procedure actCaseInvertExecute(Sender: TObject);
    procedure actCaseSentensizeExecute(Sender: TObject);
    procedure actCaseCapitalizeExecute(Sender: TObject);
    procedure actBlockTabRightExecute(Sender: TObject);
    procedure actBlockTabLeftExecute(Sender: TObject);
    procedure actAdvancedDeleteLinesExecute(Sender: TObject);
    procedure actAdvancedDeleteToBOLExecute(Sender: TObject);
    procedure actAdvancedDeleteToEOLExecute(Sender: TObject);
    procedure actAdvancedJoinLinesExecute(Sender: TObject);
    procedure actAdvancedSplitLineExecute(Sender: TObject);
    procedure actAdvancedDuplicateLineExecute(Sender: TObject);
    procedure actAdvancedSelectLineExecute(Sender: TObject);
    procedure actAdvancedDeleteWordExecute(Sender: TObject);
    procedure actAdvancedSelectWordExecute(Sender: TObject);
    procedure actAdvancedSelectToEOLExecute(Sender: TObject);
    procedure actAdvancedSelectToBOLExecute(Sender: TObject);
    procedure actAdvancedFormatLinesExecute(Sender: TObject);
    procedure actFindFindInFilesExecute(Sender: TObject);
    procedure actFileShowInExternalBrowserExecute(Sender: TObject);
    procedure actEditCheckSpellingExecute(Sender: TObject);
    procedure synSpellDone(Sender: TObject);
    procedure synSpellCheckWord(Sender: TObject; AWord: String;
      ASuggestions: TStringList; var ACorrectWord: String;
      var AAction: Integer; const AUndoEnabled: Boolean);
    procedure actExportXMLExecute(Sender: TObject);
    procedure actFilePrintExecute(Sender: TObject);
  private
    gGotoType: TGotoType;    
    iSearchDir: Integer;
    fSearchFromCaret: boolean;
    gbSearchBackwards: boolean;
    gbSearchCaseSensitive: boolean;
    gbSearchFromCaret: boolean;

    gbSearchSelectionOnly: boolean;
    gbSearchTextAtCaret: boolean;
    gbSearchWholeWords: boolean;

    gsSearchTextHistory: string;
    gsReplaceText: string;
    gsReplaceTextHistory: string;

    gsSearchText: string;
    gbWrapAround: Boolean;


    procedure SetBookmark(const AIndex: integer);
    procedure LoadLangs();
    procedure LoadLang(lang: TIniFile);
    { Private declarations }
    function GetDoc: TfrmDoc;
    procedure DoSearchReplaceText(AReplace: boolean; ABackwards: boolean; aRepAll: Boolean=False);
    function RowColToCharIndex(RowCol: TPoint): integer;
    function CharIndexToRowCol(const Index: integer): TPoint;
    function GetWeb: TfrmWeb;
  public
    fHighLighters: TStringList;
    bDunUpdate:Boolean;
    iAdd: integer;
    ExportXHTML: TSYnExporterXHTML;
    { Public declarations }
    procedure SetSelLang(sName: String);
    procedure InsertHighlighters;
    procedure SaveDoc(TDoc: TfrmDoc);
    procedure WriteFunctions;
    procedure ReadFunctions;
    procedure SaveDocAs(TDoc: TfrmDoc);
    procedure FindStringCMB(strToFind: String);
    procedure ClickLink(strURL: String);
    function SetHighlighter(name: string): TSynCustomHighlighter;
    function CloseAll(TDoc: TfrmDoc = nil): TModalResult;
    function GetHighlighterForFile(AFileName: string): TSynCustomHighlighter;
    procedure ShowOpt();
    procedure LoadHighlighters();
    procedure SaveHighlighters();
    procedure NewDoc(FileName: String; Highlighter: TSynCustomHighlighter = nil);
    property SelDoc: TfrmDoc Read GetDoc;
    property SelWeb: TfrmWeb Read GetWeb;
  end;

var
  dmMain: TdmMain;

implementation

{$R *.dfm}

uses
  UHighlighterProcs, fReplace, fAbout, fFTP, uOptVars, fImage, fMain, fSaveDlg, fOptions, fUpload,
  fFindText, SynEditTypes, fOutput, jclStrings,
  GrepSearchDlg, GrepResultsDlg, dlgSpellCheck, Registry, fFindHex, fTags,
  fOpenWindows;

resourcestring
  SFilterAllFiles = 'All files|*.*|';

procedure TDmMain.WriteFunctions;
var
  i,c:Integer;
  ini: TIniFile;
  Highlighter: TSynCustomHighlighter;
  stList: TStringList;
  s: STring;
begin

  for i:= 0 to fHighlighters.Count - 1 do begin
    Highlighter := TSynCUstomHighlighter(fHighlighters.Objects[i]);
    if Highlighter = nil then exit;
    s := AnsiReplaceText(GetLangName(Highlighter), '/', '');
    s := AnsiReplaceText(s, '\', '');
{    if fileexists(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun') then
      DeleteFile(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun');}
    ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun');
    ini.WriteString('KeywordsChar', 'WordsBefore', BoolToStr(Highlighter.CanhaveCharsBefore, True));
    stList := TStringList.Create;
    stList.LoadFromFile(ini.Filename);
    stList.Add('[Keywords]');
    stList.AddStrings(Highlighter.FunctionKeys);
    stList.SaveToFile(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun');
    stList.Free;
    ini.Free;
  end;
end;

procedure TDmmain.ReadFUnctions;
var
  i,c:Integer;
  ini: TINiList;
  Highlighter: TSynCustomHighlighter;
  s: STring;
begin
  for i:= 0 to fHighlighters.Count - 1 do begin
    Highlighter := TSynCUstomHighlighter(fHighlighters.Objects[i]);
    if Highlighter = nil then continue;
    s := AnsiReplaceText(GetLangName(Highlighter), '/', '');
    s := AnsiReplaceText(s, '\', '');
    if FileExists(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun') then begin
      ini := TIniList.Create;
      ini.LoadFromFile(ExtractFilePath(Application.ExeName) + 'funKeys\' + s + '.fun');
      Highlighter.CanhaveCharsBefore := ini.ReadBool('KeywordsChar', 'WordsBefore', True);
      ini.ReadSectionNames('Keywords', Highlighter.FunctionKeys);
      ini.Free;
    end;
  end;

end;

procedure TdmMain.InsertHighlighters;
var
  tNode: TTreeNode;
  i: Integer;
begin
  tNode := frmOptions.tvOptions.Items[4];

  for i := 0 to fHighlighters.Count - 1 do begin
      frmOptions.tvOptions.Items.AddChild(tNode, fHighlighters[i]);
  end;
end;

procedure SetCBText ( aP : PChar ; aCount : Integer );
var
   sr : string;
begin
     SetLength ( sr , aCount * 2 );
     ConvertBinToHex ( aP , @sr[1] , aCount , False );
     ClipBoard.AsText := sr;
     SetLength ( sr , 0 );
end;

procedure TDmMain.LoadLangs();
var
  ini: TIniFile;
  rec: TSearchRec;
begin
  if findFirst(ExtractFilePath(Application.ExeName) + 'highlighters\' + '*.ini', faAnyFile, Rec) = 0 then begin
    ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'highlighters\' + rec.Name);
    LoadLang(ini);
    ini.Destroy;
    While FindNext(rec) = 0 do
    begin
      ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'highlighters\' + rec.Name);

⌨️ 快捷键说明

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