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

📄 unit2.pas.svn-base

📁 支持自定义语法高亮显示的编辑器控件
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
unit unit2;
{$I Easy.inc}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, EasyEditor, StdCtrls, EasyBox, Buttons, EasyEditSource, EasyControls,
  EasyClasses, EasyParser, EasyKeyMap, DBCtrls, Db, EasyDBEditor, EasyRuler,
  DBTables, ComCtrls, shellapi;


const
  LanguagesCount = 39;

type
  TfrmContainer = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet6: TTabSheet;
    TabSheet7: TTabSheet;
    TabSheet8: TTabSheet;
    TabSheet9: TTabSheet;
    TabSheet10: TTabSheet;
    GutterMarginPanel: TPanel;
    Panel2: TPanel;
    gbBreakpointAndBookmarks: TGroupBox;
    SpeedButton1: TSpeedButton;
    SpeedButton12: TSpeedButton;
    gbMargin: TGroupBox;
    lbMarginColor: TLabel;
    lbMarginPosition: TLabel;
    edMarginPosition: TEdit;
    EasyColorBox1: TEasyColorBox;
    gbGutterMargin: TGroupBox;
    lbGutterWidth: TLabel;
    lbGutterColor: TLabel;
    chbLineNumbers: TCheckBox;
    chbLinesOnGutter: TCheckBox;
    chbShowGutter: TCheckBox;
    cbGutterColor: TEasyColorBox;
    edWidth: TEdit;
    chbShowMargin: TCheckBox;
    WrapPanel: TPanel;
    Panel1: TPanel;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    gbWordWrap: TGroupBox;
    chbWordWrap: TCheckBox;
    chbUseTabCharacter: TCheckBox;
    chbWrapAtMargin: TCheckBox;
    chbCursorThroughTabs: TCheckBox;
    BackgroundPanel: TPanel;
    Panel4: TPanel;
    gbEdit: TGroupBox;
    lbStyleGutter: TLabel;
    lbBeginColorGutter: TLabel;
    lbEndColorGutter: TLabel;
    cbBackgroundOptions: TComboBox;
    cbBeginColorStyle: TEasyColorBox;
    cbEndColorStyle: TEasyColorBox;
    gbGutter: TGroupBox;
    lbStyleEdit: TLabel;
    lbBeginColorEdit: TLabel;
    lbEndColorEdit: TLabel;
    cbGutterOptions: TComboBox;
    cbBeginColorStyleGutter: TEasyColorBox;
    cbEndColorStyleGutter: TEasyColorBox;
    SyntaxParsersPanel: TPanel;
    lbLanguages: TListBox;
    pnSyntaxParser: TPanel;
    lbLanguage: TLabel;
    lbPress: TLabel;
    lbColorMapping: TLabel;
    cbColorMapping: TComboBox;
    EasyEditorDialogPanel: TPanel;
    Panel5: TPanel;
    btLoad: TButton;
    btSave: TButton;
    btFind: TButton;
    btCustomize: TButton;
    btReplace: TButton;
    btGoTo: TButton;
    EasyEditorSourcePanel: TPanel;
    Panel7: TPanel;
    lbSeveralEditor: TLabel;
    DBEasyEditorPanel: TPanel;
    Panel8: TPanel;
    lbEasyEditor: TLabel;
    chbActive: TCheckBox;
    chbAutoDisplay: TCheckBox;
    chbReadOnly: TCheckBox;
    DBNavigator1: TDBNavigator;
    Panel6: TPanel;
    pnStandartMemo: TPanel;
    lbStandartMemo: TLabel;
    DBMemo1: TDBMemo;
    PageTypePanel: TPanel;
    Panel9: TPanel;
    lbPageType: TLabel;
    ComboBox1: TComboBox;
    CompanyPanel: TPanel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    pnProject1: TPanel;
    Panel10: TPanel;
    Panel11: TPanel;
    Panel12: TPanel;
    Label30: TLabel;
    Label32: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    EasyEditSource1: TEasyEditSource;
    EasyEditorParser1: TEasyEditorParser;
    EasyEditorParser2: TEasyEditorParser;
    EasyEditSource2: TEasyEditSource;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    EasyEditorParser3: TEasyEditorParser;
    EasyEditSource3: TEasyEditSource;
    Panel3: TPanel;
    Label14: TLabel;
    Label15: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    Label6: TLabel;
    Panel13: TPanel;
    Label29: TLabel;
    Label2: TLabel;
    EasyEdit1: TEasyEdit;
    EasyEdit2: TEasyEdit;
    EasyEdit4: TEasyEdit;
    EasyEdit3: TEasyEdit;
    EasyEdit5: TEasyEdit;
    EasyEdit6: TEasyEdit;
    EasyEdit7: TEasyEdit;
    EasyDBEdit1: TEasyDBEdit;
    EasyEdit8: TEasyEdit;
    TabSheet11: TTabSheet;
    Label3: TLabel;
    pnProject2: TPanel;
    Panel15: TPanel;
    Label9: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Panel16: TPanel;
    Label26: TLabel;
    Panel17: TPanel;
    Label28: TLabel;
    Label31: TLabel;
    Panel18: TPanel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    TabSheet12: TTabSheet;
    PrintPanel: TPanel;
    Panel19: TPanel;
    btnRtf: TButton;
    btnHtml: TButton;
    btnPreview: TButton;
    btnPrint: TButton;
    EasyEdit9: TEasyEdit;
    SaveDialog2: TSaveDialog;
    btnCollapse: TButton;
    Timer1: TTimer;
    sbPaintFormattingMarks: TSpeedButton;
    cbRulerUnits: TComboBox;
    Label27: TLabel;
    gbBlockSelMode: TGroupBox;
    cbBlockSelMode: TComboBox;
    Label37: TLabel;
    cbLineBreak: TComboBox;
    Label38: TLabel;
    cbBlockSelection: TCheckBox;
    chbHighlightBrackets: TCheckBox;
    Image2: TImage;
    Label1: TLabel;
    Label8: TLabel;
    Label39: TLabel;
    btnPrintSettings: TButton;
    chbDrawLineBookmarks: TCheckBox;
    chbLineReadOnly: TCheckBox;
    chbTripleClickLine: TCheckBox;
    gbUndoRedo: TGroupBox;
    sbtUndo: TSpeedButton;
    sbtRedo: TSpeedButton;
    chbUndoAfterSave: TCheckBox;
    laModified: TLabel;
    chbLeaveTabs: TCheckBox;
    procedure chbWordWrapClick(Sender: TObject);
    procedure chbUseTabCharacterClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure chbCursorThroughTabsClick(Sender: TObject);
    procedure cbBackgroundOptionsChange(Sender: TObject);
    procedure EasycbBeginColorStyleChange(Sender: TObject);
    procedure EasycbEndColorStyleChange(Sender: TObject);
    procedure btFindClick(Sender: TObject);
    procedure lbLanguagesClick(Sender: TObject);
    procedure btCustomizeClick(Sender: TObject);
    procedure chbLineNumbersClick(Sender: TObject);
    procedure chbLinesOnGutterClick(Sender: TObject);
    procedure chbShowGutterClick(Sender: TObject);
    procedure edWidthEnter(Sender: TObject);
    procedure cbGutterColorChange(Sender: TObject);
    procedure chbShowMarginClick(Sender: TObject);
    procedure edMarginPositionEnter(Sender: TObject);
    procedure EasyColorBox1Change(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton12Click(Sender: TObject);
    procedure chbWrapAtMarginClick(Sender: TObject);
    procedure cbBeginColorStyleChange(Sender: TObject);
    procedure cbEndColorStyleChange(Sender: TObject);
    procedure cbGutterOptionsChange(Sender: TObject);
    procedure btReplaceClick(Sender: TObject);
    procedure btGoToClick(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure cbColorMappingChange(Sender: TObject);
    procedure chbActiveClick(Sender: TObject);
    procedure chbAutoDisplayClick(Sender: TObject);
    procedure chbReadOnlyClick(Sender: TObject);
    procedure Label30Click(Sender: TObject);
    procedure Label29Click(Sender: TObject);
    procedure Label31Click(Sender: TObject);
    procedure Label10Click(Sender: TObject);
    procedure Label11Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure cbBeginColorStyleGutterChange(Sender: TObject);
    procedure cbEndColorStyleGutterChange(Sender: TObject);
    procedure btLoadClick(Sender: TObject);
    procedure btSaveClick(Sender: TObject);
    procedure EasyEdit1WordSpell(Sender: TObject; const s: String;
      var Correct: Boolean);
    procedure EasyEdit3AutoComplete(Sender: TObject; Strings: TStrings;
      AKey: Char; var AllowPopup: Boolean);
    procedure EasyEdit3DisplayHint(Sender: TObject; var s: String;
      AKey: Char; var AllowPopup: Boolean);
    procedure EasyEdit3BeforeInsertPopup(Sender: TObject; var s: String);
    procedure btnRtfClick(Sender: TObject);
    procedure btnHtmlClick(Sender: TObject);
    procedure btnPreviewClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnCollapseClick(Sender: TObject);
    procedure EasyEdit1SourceChanged(Sender: TObject;
      State: TEasyEditSourceStates);
    procedure Timer1Timer(Sender: TObject);
    procedure sbPaintFormattingMarksClick(Sender: TObject);
    procedure cbRulerUnitsChange(Sender: TObject);
    procedure cbBlockSelModeChange(Sender: TObject);
    procedure cbLineBreakChange(Sender: TObject);
    procedure cbBlockSelectionClick(Sender: TObject);
    procedure chbHighlightBracketsClick(Sender: TObject);
    procedure EasyEdit3KeyPress(Sender: TObject; var Key: Char);
    procedure btnPrintSettingsClick(Sender: TObject);
    procedure chbDrawLineBookmarksClick(Sender: TObject);
    procedure EasyEdit2SelectionChanged(Sender: TObject);
    procedure chbLineReadOnlyClick(Sender: TObject);
    procedure chbTripleClickLineClick(Sender: TObject);
    procedure sbtUndoClick(Sender: TObject);
    procedure sbtRedoClick(Sender: TObject);
    procedure chbUndoAfterSaveClick(Sender: TObject);
    procedure EasyEdit5SelectionChanged(Sender: TObject);
    procedure chbLeaveTabsClick(Sender: TObject);
  private
    FCollapse    : boolean;
    FDisableFlag : boolean;
    FLoading     : boolean;//am
    procedure CollapseChanged;
    procedure UpdateCollapse(ACollapse : boolean);
    procedure CollapseCode(ACollapse : boolean);
    procedure  FindInPopupBox(Sender : TObject; AStrings : TStrings; const s : string; var Index : integer; var Handled : boolean);
    procedure UpdateModified;//am
  public
    { Public declarations }
  end;

  TLanguagesTextAndRules = array [1..LanguagesCount] of string;

var
  frmContainer: TfrmContainer;

const
  LanguagesText : TLanguagesTextAndRules = ('aspinhtml.txt', 'assembler.txt', 'awk.txt',
    'c.txt', 'csharp.txt', 'cppbuilder.txt', 'clarion.txt', 'clipper.txt', 'cobol.txt',
    'css1.txt', 'css2.txt', 'dfm.txt', 'fortran.txt', 'foxpro.txt', 'html.txt', 'ini.txt',
    'javabuilder.txt', 'jscript.txt', 'jsinhtml.txt', 'latex.txt', 'midl.txt',
    'modula2.txt', 'batch.txt', 'oberon.txt', 'objectpascal.txt', 'perl.txt',
    'phpinhtml.txt', 'plsql.txt', 'python.txt', 'rc.txt', 'sql_oracle.txt',
   'tcltk.txt', 'shell.txt', 'vbscript.txt', 'vbsinhtml.txt', 'vbasic.txt',
   'vb_net.txt','xml.txt', 'xml_scripts.txt');//am

  LanguagesRules : TLanguagesTextAndRules = ('asp(vbs)_html.xs', 'assembler.xs', 'awk_script.xs', 'c.xs',
    'c#.xs', 'c++builder.xs', 'clarion.xs', 'cliper.xs', 'cobol.xs', 'css_lev1.xs', 'css_lev2.xs',
    'dfm_files.xs', 'fortran.xs', 'foxpro.xs', 'html.xs', 'ini_files.xs', 'java.xs', 'java_script.xs',
    'javascript_html.xs', 'latex.xs', 'microsoft_idl.xs', 'modula2.xs', 'ms_dosbl.xs', 'oberon.xs',
    'delphi.xs', 'perl.xs', 'php_in_html.xs', 'pl_sql.xs', 'python.xs', 'resourse_rs_files.xs',
    'sql_oracle.xs', 'tcltk.xs', 'unix_shell.xs', 'vbs_script.xs', 'vbs_script_html.xs',
    'vis_basic.xs', 'vb_net.xs', 'xml.xs', 'xml_with_scripts.xs');//am

implementation
uses
  typinfo,
  EasyStrings, EasyUtils, EasyRtfExport, EasyHtmlExport, EasyCustomDlg, EasyPreviewDlg,
  EasySearchDlg, EasyReplDlg, EasyGoToDlg, EasyPrintDlg, EasyProgressDlg;
{$R *.DFM}
const
  sPropStr = '{\rtf{\colortbl\red0\green0\blue0;\red0\green128\blue128;} \cf1 Property \cf0 | %s | \b %s}';
  tresword = 6;
type
  TMStrings = class(TEasyStrings);
  TMParser = class(TEasyEditorParser);
{------------------------------------------------------}

procedure FillStrings(Strings : TStrings; AClass : TClass);
var
  i         : integer;
  Count     : integer;
  RealCount : integer;
  PropInfo  : PPropInfo;
  PropList  : PPropList;
begin
  Count := GetTypeData(AClass.ClassInfo)^.PropCount;
  if Count > 0 then
  begin
    GetMem(PropList, Count * SizeOf(Pointer));
    try
      RealCount := GetPropList(AClass.ClassInfo, tkAny, PropList);
      for I := 0 to RealCount - 1 do
      begin
        PropInfo := PropList^[I];
        Strings.Add(Format(sPropStr, [PropInfo.Name, PropInfo.PropType^.Name]));
      end;
    finally
      FreeMem(PropList, Count * SizeOf(Pointer));
    end;
  end;
end;

function FillCodeCompletion(Editor : TCustomEasyEdit; Strings : TStrings) : boolean;
var
  s      : string;
  Cmp    : TComponent;
  AClass : TClass;
begin
  result := false;
  Strings.Clear;

  with Editor, EditSource, CurrentPosition do
    s := GetTextAt(Point(X - 1, Y), false);

  if (s <> '') and (s[Length(s)] = '.') then
    Delete(s, Length(s), 1);

  AClass := GetClass(s);

  if AClass <> nil then
  begin
    result := true;
    FillStrings(Strings, AClass)
  end
  else
  begin
    Cmp := Editor.Owner.FindComponent(s);
    if Cmp <> nil then
    begin
      FillStrings(Strings, Cmp.ClassType);
      result := true;
    end
    else
      FillStrings(Strings, TWinControl);
  end;
end;

{------------------------------------------------------}

procedure JumpToURL(const s: string);
begin
  ShellExecute(0, nil, PChar(s), nil, nil, SW_SHOW);
end;

{------------------------------------------------------}

procedure TfrmContainer.FormCreate(Sender: TObject);

  procedure _LoadText(Value : TEasyEdit);
  begin
    Value.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + '..\' + 'text\objectpascal.txt');
  end;

begin
  EasyEditorParser1.Rules.LoadFromFile(ExtractFilePath(ParamStr(0)) + '..\' + 'syntax\delphi.xs');
  EasyEdit2.WantTabs := True;
  EasyEdit2.WordWrap := chbWordWrap.Checked;
  chbWordWrap.Checked := True;
  cbBeginColorStyle.SelectedColor := EasyEdit4.Background.GradientStartColor;
  cbEndColorStyle.SelectedColor := EasyEdit4.Background.GradientEndColor;
  cbBeginColorStyleGutter.SelectedColor := EasyEdit4.Gutter.Background.GradientStartColor;
  cbEndColorStyleGutter.SelectedColor := EasyEdit4.Gutter.Background.GradientEndColor;
  edWidth.Text := '32';
  edMarginPosition.Text := '70';
  cbBackgroundOptions.ItemIndex := 1;
  _LoadText(EasyEdit1);
  _LoadText(EasyEdit2);
  _LoadText(EasyEdit4);
  _LoadText(EasyEdit5);
  _LoadText(EasyEdit6);
  _LoadText(EasyEdit7);
  _LoadText(EasyEdit8);
  lbLanguages.ItemIndex := 0;
  lbLanguages.OnClick(lbLanguages);
  {$IFDEF EASY_FLATSB}
  EasyEdit1.FlatScrollBars := true;
  {$ENDIF}
  Table1.Open;
  EasyEdit3.OnFindStringInPopup := FindInPopupBox;
end;

procedure  TfrmContainer.FindInPopupBox(Sender : TObject; AStrings : TStrings; const s : string; var Index : integer; var Handled : boolean);
var
  i    : integer;

  function _Check(Str : string) : boolean;
  var
    P    : integer;
  begin
    result := false;
    P := Pos('|', Str);
    if P <> 0 then
    begin

⌨️ 快捷键说明

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