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

📄 fjveditortest.pas

📁 Jedi Code Library JCL JVCL 组件包 JCL+JVCL超过300个组件的非可视/可视大型组件包。
💻 PAS
字号:
unit fJvEditorTest;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  JvEditor, JvHLParser, StdCtrls, ExtCtrls, ComCtrls, JvRegAuto, JvHLEditor
  {$IFDEF COMPILER4_UP}, ImgList, JvComponent {$ENDIF COMPILER4_UP};

type
  TfrmEditor  = class(TForm)
    GutterImages: TImageList;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    JvEditor: TJvHLEditor;
    TabSheet2: TTabSheet;
    RAEditor1: TJvHLEditor;
    TabSheet3: TTabSheet;
    RAEditor2: TJvHLEditor;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    RAEditor3: TJvHLEditor;
    RAEditor4: TJvEditor;
    Panel1: TPanel;
    Label1: TLabel;
    ilCompletions: TImageList;
    RegAuto1: TJvRegAuto;
    TabSheet6: TTabSheet;
    RAHLEditor1: TJvHLEditor;
    TabSheet7: TTabSheet;
    RAHLEditor2: TJvHLEditor;
    TabSheet8: TTabSheet;
    RAHLEditor3: TJvHLEditor;
    TabSheet9: TTabSheet;
    RAHLEditor4: TJvHLEditor;
    StatusBar1: TStatusBar;
    TabSheet10: TTabSheet;
    RAHLEditor5: TJvHLEditor;
    TabSheet11: TTabSheet;
    RAHLEditor6: TJvHLEditor;
    TabSheet12: TTabSheet;
    RAHLEditor7: TJvHLEditor;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure RAEditorPaintGutter(Sender: TObject; Canvas: TCanvas);
    procedure PageControl1Change(Sender: TObject);
    procedure PageControl1Enter(Sender: TObject);
    procedure RAEditorCompletionDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    procedure RegAuto1AfterLoad(Sender: TObject);
    procedure RegAuto1AfterSave(Sender: TObject);
    procedure RAEditor3ReservedWord(Sender: TObject; Token: String;
      var Reserved: Boolean);
    procedure RAEditorCompletionApply(Sender: TObject;
      const OldString: String; var NewString: String);
  private
    Parser : TJvIParser;
  end;

var
  frmEditor: TfrmEditor ;

implementation

uses JvStrUtil, JvCtlConst;

{$R *.DFM}

procedure TfrmEditor .FormCreate(Sender: TObject);
begin
  Application.Title := Caption;
  Parser := TJvIParser.Create;
end;

procedure TfrmEditor .FormDestroy(Sender: TObject);
begin
  Parser.Free;
end;

procedure TfrmEditor .RAEditorPaintGutter(Sender: TObject; Canvas: TCanvas);
  procedure Draw(Y, ImageIndex : integer);
  var
    Ro : integer;
    R : TRect;
  begin
    if Y <> -1 then
      with Sender as TJvEditor do begin
        Ro := Y - TopRow;
        R := CalcCellRect(0, Ro);
        GutterImages.Draw(Canvas,
          GutterWidth -GutterRightMargin -GutterImages.Width{R.Left},
          R.Top + (CellRect.Height - GutterImages.Height) div 2 +1,
          ImageIndex);
      end;
  end;
var
  i  : integer;
begin
  for i := 0 to 9 do
    if (Sender as TJvEditor).Bookmarks[i].Valid then
      Draw((Sender as TJvEditor).Bookmarks[i].Y, i);
end;

procedure TfrmEditor .PageControl1Change(Sender: TObject);
begin
  Parser.Style := TIParserStyle(not(PageControl1.ActivePage.PageIndex=0));
  JvEditor.Refresh;
  RAEditor1.Refresh;
  RAEditor2.Refresh;
  RAEditor3.Refresh;
end;

procedure TfrmEditor .PageControl1Enter(Sender: TObject);
begin
  (PageControl1.ActivePage.Controls[0] as TWinControl).SetFocus;
end;

procedure TfrmEditor .RAEditorCompletionDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
	Offset, W : Integer;
  S : string;
  ImageIndex : integer;
begin
  Offset := 3;
  with Control as TListBox, (Control.Owner as TJvEditor).Completion do
  begin
    Canvas.FillRect(Rect);
    case Mode of
      cmIdentifers :
        begin
          ImageIndex := StrToInt(Trim(SubStr(Items[Index], 2, Separator))) - 1;
          ilCompletions.Draw(Canvas, Rect.Left + 2, Rect.Top, ImageIndex);
          Canvas.TextOut(Rect.Left + 3*Offset + ilCompletions.Width, Rect.Top +2, SubStr(Items[Index], 0, Separator));
          S := Trim(SubStr(Items[Index], 1, Separator));
          W := Canvas.TextWidth(S);
          Canvas.TextOut(Rect.Right - 2*Offset - W, Rect.Top +2, S);
        end;
      cmTemplates :
        begin
          Canvas.TextOut(Rect.Left + Offset, Rect.Top +2, SubStr(Items[Index], 1, Separator));
          Canvas.Font.Style := [fsBold];
          S := SubStr(Items[Index], 0, Separator);
          W := Canvas.TextWidth(S);
          Canvas.TextOut(Rect.Right - 2*Offset - W, Rect.Top +2, S);
        end;
    end;
  end;  
end;

procedure TfrmEditor .RegAuto1AfterLoad(Sender: TObject);
begin
  PageControl1.ActivePage := PageControl1.Pages[RegAuto1.ReadInteger(Name, 'PageIndex', PageControl1.ActivePage.PageIndex)];
  PageControl1Change(nil);
end;


procedure TfrmEditor .RegAuto1AfterSave(Sender: TObject);
begin
  RegAuto1.WriteInteger(Name, 'PageIndex', PageControl1.ActivePage.PageIndex);
end;

procedure TfrmEditor .RAEditor3ReservedWord(Sender: TObject; Token: String;
  var Reserved: Boolean);
begin
  Reserved := (Token = 'R') or (Token = '&') or (Token = 'A') or
    Cmp(Token, 'Library');
end;

procedure TfrmEditor .RAEditorCompletionApply(Sender: TObject;
  const OldString: String; var NewString: String);
begin
  NewString := OldString + Copy(NewString, Length(OldString) + 1, 10000);
end;

end.

⌨️ 快捷键说明

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