editu2.pas

来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,411 行 · 第 1/4 页

PAS
1,411
字号
{+-----------------------------------------------------------------------------+
 | Created:     not known
 | Last change: 1999-11-11
 | Author:      Primoz Gabrijelcic
 | Description: mwEdit demo - main unit
 | Version:     0.46 (see version.rtf for version history)
 | Copyright (c) 1998 Primoz Gabrijelcic
 | No rights reserved.
 |
 | Thanks to: Carlos Wijders, Brad Stowers, Heedong Lim
 |
 | Known issues:
 |  - OnChange is not generated on Load
 |  - ScrollBar scroll is not generating any event (except OnPaint)
 |
 +----------------------------------------------------------------------------+}
{$J+}
unit EditU2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ComCtrls, Menus, mwPasSyn, mwCustomEdit, mwHighlighter,
  DcjCppSyn, Spin, DcjPerlSyn, mwGeneralSyn, mwKeyCmds, cbHPSyn,
  mwKeyCmdsEditor, {$IFNDEF MWE_COMPILER_4_UP}ImgList,{$ENDIF} Buttons,
  DcjJavaSyn, cwCACSyn, siTCLTKSyn, wmSQLSyn, hkAWKSyn, hkHTMLSyn, odPySyn,
  odPythonBehaviour, lbVBSSyn, {dxDBDateEdit, Mask, dxDateEdit, }mkGalaxySyn,   //eb 1999-08-25
  mwRtfExport, mwExport, mwHtmlExport, dmBatSyn, dmDfmSyn, nhAsmSyn,
  mwDmlSyn, izIniSyn, dmMLSyn, mwCompletionProposal;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;                                       
    PageControl1: TPageControl;
    tabBookmarks: TTabSheet;
    cbEnableKeys: TCheckBox;
    cbGlyphsVisible: TCheckBox;
    Label4: TLabel;
    inpLeftMargin: TSpinEdit;
    tabGutter: TTabSheet;
    Label5: TLabel;
    tabHighlighter: TTabSheet;
    Label3: TLabel;
    cbxHighlighterSelect: TComboBox;
    cbxSettingsSelect: TComboBox;
    Label1: TLabel;
    tabCaret: TTabSheet;
    cbxInsertCaret: TComboBox;
    Label7: TLabel;
    Label8: TLabel;
    cbxOverwriteCaret: TComboBox;
    cbInsertMode: TCheckBox;
    tabUndo: TTabSheet;
    btnUndo: TButton;
    tabFile: TTabSheet;
    btnLoad: TButton;
    tabInfo: TTabSheet;
    Label9: TLabel;
    Label10: TLabel;
    inpLineText: TEdit;
    Label11: TLabel;
    inpMaxUndo: TSpinEdit;
    cbReadonly: TCheckBox;
    tabDisplay: TTabSheet;
    outFilename: TLabel;
    tabAbout: TTabSheet;
    Label17: TLabel;
    Label18: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    outLineCount: TEdit;
    tabEvents: TTabSheet;
    FontDialog1: TFontDialog;
    cbxGutterColor: TComboBox;
    inpLeftChar: TSpinEdit;
    inpTopLine: TSpinEdit;
    inpCaretX: TSpinEdit;
    inpCaretY: TSpinEdit;
    cbEnableEventLog: TCheckBox;
    lbEventLog: TListBox;
    Label2: TLabel;
    Label19: TLabel;
    Memo1: TMemo;
    cbxAttrSelect: TComboBox;
    cbxAttrBackground: TComboBox;
    cbxAttrForeground: TComboBox;
    Label23: TLabel;
    Label24: TLabel;
    grbAttrStyle: TGroupBox;
    btnKeywords: TButton;
    grbAttrComments: TGroupBox;
    cbStyleStrikeOut: TCheckBox;
    cbStyleUnderline: TCheckBox;
    cbStyleItalic: TCheckBox;
    cbStyleBold: TCheckBox;
    DcjCppSyn1: TDcjCppSyn;
    DcjPerlSyn1: TDcjPerlSyn;
    mwGeneralSyn1: TmwGeneralSyn;
    cbHPSyn1: TcbHPSyn;
    btnSaveToReg: TButton;
    btnLoadFromReg: TButton;
    StatusBar: TStatusBar;
    mwEdit: TmwCustomEdit;
    TabSheet1: TTabSheet;
    KeyCmdList: TListView;
    btnEdit: TButton;
    ImageList1: TImageList;
    cbInternalImages: TCheckBox;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    Label25: TLabel;
    inpXOffset: TSpinEdit;
    DcjJavaSyn1: TDcjJavaSyn;
    btnRedo: TButton;
    cwCACSyn1: TcwCACSyn;
    cbCommentsBas: TCheckBox;
    cbCommentsAsm: TCheckBox;
    cbCommentsPas: TCheckBox;
    cbCommentsAnsi: TCheckBox;
    cbCommentsC: TCheckBox;
    Label22: TLabel;
    wmSQLSyn1: TwmSQLSyn;
    siTCLTKSyn1: TsiTCLTKSyn;
    btnPrint: TButton;
    mwPasSyn1: TmwPasSyn;
    cbLineNumbers: TCheckBox;
    cbLeadingZeros: TCheckBox;
    cbZeroStart: TCheckBox;
    hkAWKSyn1: ThkAWKSyn;
    odPySyn1: TodPySyn;
    cbMouse: TCheckBox;
    cbDrag: TCheckBox;
    cbKeyboard: TCheckBox;
    cbOther: TCheckBox;
    btnClear: TButton;
    hkHTMLSyn1: ThkHTMLSyn;
    odPythonBehaviour1: TodPythonBehaviour;
    tabExporter: TTabSheet;
    cbxExporterSelect: TComboBox;
    Label27: TLabel;
    btnExportToClip: TButton;
    lbVbsSyn1: TlbVbsSyn;
    tabEdit: TTabSheet;
    cbAutoIndent: TCheckBox;
    cbWantTabs: TCheckBox;
    Label6: TLabel;
    inpGutterWidth: TSpinEdit;
    Label29: TLabel;
    inpTabWidth: TSpinEdit;
    mkGalaxySyn1: TmkGalaxySyn;
    Label30: TLabel;
    inpDigitCount: TSpinEdit;
    Label31: TLabel;
    inpLeftOffset: TSpinEdit;
    inpRightOffset: TSpinEdit;
    Label32: TLabel;
    mwHtmlExport1: TmwHtmlExport;
    mwRtfExport1: TmwRtfExport;
    btnExportAllToClip: TButton;
    FindDialog1: TFindDialog;
    ReplaceDialog1: TReplaceDialog;
    tabSearch: TTabSheet;
    btnSearch: TButton;
    btnSearchNext: TButton;
    btnSearchPrev: TButton;
    lblSearchResult: TLabel;
    btnReplace: TButton;
    dmBatSyn1: TdmBatSyn;
    dmDfmSyn1: TdmDfmSyn;
    nhAsmSyn1: TnhAsmSyn;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label26: TLabel;
    Label28: TLabel;
    cbHideSelection: TCheckBox;
    inpRightEdge: TSpinEdit;
    cbScrollPastEOL: TCheckBox;
    cbxScrollBars: TComboBox;
    cbxColor: TComboBox;
    cbxForeground: TComboBox;
    cbxBackground: TComboBox;
    btnFont: TButton;
    inpExtraLineSpacing: TSpinEdit;
    cbxREColor: TComboBox;
    cbHalfPageScroll: TCheckBox;
    Label33: TLabel;
    mwDmlSyn1: TmwDmlSyn;
    izIniSyn1: TizIniSyn;
    dmMLSyn1: TdmMLSyn;
    MwCompletionProposal1: TMwCompletionProposal;
    mwAutoComplete1: TmwAutoComplete;
    Memo2: TMemo;
    procedure btnLoadClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cbxSettingsSelectChange(Sender: TObject);
    procedure btnUndoClick(Sender: TObject);
    procedure mwEditEnter(Sender: TObject);
    procedure mwEditKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure mwEditChange(Sender: TObject);
    procedure cbxHighlighterSelectChange(Sender: TObject);
    procedure cbReadonlyClick(Sender: TObject);
    procedure cbHideSelectionClick(Sender: TObject);
    procedure cbScrollPastEOLClick(Sender: TObject);
    procedure inpRightEdgeChange(Sender: TObject);
    procedure cbxScrollBarsChange(Sender: TObject);
    procedure cbxColorChange(Sender: TObject);
    procedure cbxForegroundChange(Sender: TObject);
    procedure cbxBackgroundChange(Sender: TObject);
    procedure btnFontClick(Sender: TObject);
    procedure cbxInsertCaretChange(Sender: TObject);
    procedure cbxOverwriteCaretChange(Sender: TObject);
    procedure cbInsertModeClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure cbxGutterColorChange(Sender: TObject);
    procedure inpGutterWidthChange(Sender: TObject);
    procedure cbEnableKeysClick(Sender: TObject);
    procedure cbGlyphsVisibleClick(Sender: TObject);
    procedure inpLeftMarginChange(Sender: TObject);
    procedure inpMaxUndoChange(Sender: TObject);
    procedure inpLineTextKeyPress(Sender: TObject; var Key: Char);
    procedure mwEditClick(Sender: TObject);
    procedure inpLeftCharChange(Sender: TObject);
    procedure inpTopLineChange(Sender: TObject);
    procedure inpCaretXChange(Sender: TObject);
    procedure inpCaretYChange(Sender: TObject);
    procedure cbEnableEventLogClick(Sender: TObject);
    procedure mwEditDblClick(Sender: TObject);
    procedure mwEditDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure mwEditDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure mwEditEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure mwEditExit(Sender: TObject);
    procedure mwEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure mwEditKeyPress(Sender: TObject; var Key: Char);
    procedure mwEditPaint(Sender: TObject; ACanvas: TCanvas);
    procedure mwEditStartDrag(Sender: TObject;
      var DragObject: TDragObject);
    procedure cbxAttrSelectChange(Sender: TObject);
    procedure cbxAttrBackgroundChange(Sender: TObject);
    procedure cbCommentsCClick(Sender: TObject);
    procedure btnKeywordsClick(Sender: TObject);
    procedure mwEditProcessCommand(Sender: TObject;                             //nmi 1999-10-17
      var Command: TmwEditorCommand; var AChar: Char; Data: Pointer);
    procedure mwEditProcessUserCommand(Sender: TObject;
      var Command: TmwEditorCommand; var AChar: Char; Data: Pointer);
    procedure btnSaveToRegClick(Sender: TObject);
    procedure btnLoadFromRegClick(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure cbInternalImagesClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure mwEditPlaceMark(Sender: TObject; var mark: TMark);                //nmi 1999-10-17
    procedure inpXOffsetChange(Sender: TObject);
    procedure inpExtraLineSpacingChange(Sender: TObject);
    procedure btnRedoClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure mwEditCommandDone(Sender: TObject);
    procedure mwEditPrintStatus(Sender: TObject; Status: TmwPrintStatus;        //nmi 1999-10-17
      PageNumber: Integer; var Abort: Boolean);
    procedure cbLineNumbersClick(Sender: TObject);
    procedure cbLeadingZerosClick(Sender: TObject);
    procedure cbZeroStartClick(Sender: TObject);
    procedure mwEditMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure mwEditMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure mwEditMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure btnClearClick(Sender: TObject);
    procedure cbAutoIndentClick(Sender: TObject);
    procedure cbxREColorChange(Sender: TObject);
    procedure cbHalfPageScrollClick(Sender: TObject);
    procedure inpTabWidthChange(Sender: TObject);
    procedure cbWantTabsClick(Sender: TObject);
    procedure mwEditSelectionChange(Sender: TObject);
    procedure inpDigitCountChange(Sender: TObject);
    procedure inpLeftOffsetChange(Sender: TObject);
    procedure inpRightOffsetChange(Sender: TObject);
    procedure cbxExporterSelectChange(Sender: TObject);
    procedure btnExportToClipClick(Sender: TObject);
    procedure btnSearchClick(Sender: TObject);
    procedure btnSearchNextClick(Sender: TObject);
    procedure DoFindText(Sender: TObject);
    procedure btnReplaceClick(Sender: TObject);
    procedure DoReplaceText(Sender: TObject);
    procedure mwEditSpecialLineColors(Sender: TObject; Line: Integer;
      var Special: Boolean; var FG, BG: TColor);
    procedure mwEditDropFiles(Sender: TObject; X, Y: Integer;
      Files: TStrings);
  private
    fName: string;
    markButtons: array [0..4] of TSpeedButton;
    disableMarkButtons: boolean;
    procedure LoadSettings;
    function ColorToIndex(col: TColor): integer;
    function IndexToColor(index: integer): TColor;
    procedure LoadInfo;
    procedure EnumerateHighlighters;
    procedure UpdateKeystrokesList;
    procedure ReloadAttributes;
    procedure ResetMarkButtons;
    procedure RebuildMarks;
    procedure RecalcLeftMargin;
    procedure EnumerateExporters;
    procedure LoadFile(const FileName: string);                                 //mh 1999-11-02
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

{begin}                                                                         //mh 1999-11-02
procedure TForm1.LoadFile(const FileName: string);
// procedure TForm1.btnLoadClick(Sender: TObject);

  function MatchesExtension(ext: string; light: TmwCustomHighlighter): boolean;
  var
    fext  : string;
    idx   : integer;
    ucext : string;
    filter: string;
    p     : integer;
  begin
    Result := false;
    ucext := UpperCase(ext);
    p := Pos('.',ucext);
    if p > 0 then ucext := Copy(ucext,p+1,Length(ucext)-p);
    p := Pos('|',light.DefaultFilter);
    if p > 0 then begin
      filter := Copy(light.DefaultFilter,p+1,Length(light.DefaultFilter)-p);
      while filter <> '' do begin
        p := Pos(';',filter);
        if p = 0 then p := Length(filter)+1;
        fext := Copy(filter,1,p-1);
        filter := Copy(filter,p+1,Length(filter)-p);
        p := Pos('.',fext);
        if p > 0 then fext := Copy(fext,p+1,Length(fext)-p);
        if UpperCase(fext) = ucext then begin
          idx := cbxHighlighterSelect.Items.IndexOf(light.LanguageName);

⌨️ 快捷键说明

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