📄 rm_jveditorcommon.pas
字号:
property OnKeyPress;
property OnKeyUp;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick;
property OnPaintGutter: TOnPaintGutter read FOnPaintGutter write FOnPaintGutter;
property OnGutterClick: TOnGutterClick read FOnGutterClick write FOnGutterClick;
property OnGutterDblClick: TOnGutterClick read FOnGutterDblClick write FOnGutterDblClick;
property OnCompletionIdentifier: TOnCompletion read FOnCompletionIdentifier write FOnCompletionIdentifier;
property OnCompletionTemplate: TOnCompletion read FOnCompletionTemplate write FOnCompletionTemplate;
property OnCompletionDrawItem: TDrawItemEvent read FOnCompletionDrawItem write FOnCompletionDrawItem;
property OnCompletionMeasureItem: TMeasureItemEvent read FOnCompletionMeasureItem write FOnCompletionMeasureItem;
property OnLineInserted: TJvLineChangeEvent read FOnLineInserted write FOnLineInserted;
property OnLineDeleted: TJvLineChangeEvent read FOnLineDeleted write FOnLineDeleted;
property DockManager;
end;
TJvCompletionBase = class(TPersistent)
private
FJvEditor: TJvCustomEditorBase;
FPopupList: TListBox;
FItemIndex: Integer;
FMode: TCompletionList;
FDefMode: TCompletionList;
FItemHeight: Integer;
FTimer: TTimer;
FEnabled: Boolean;
FVisible: Boolean;
FDropDownCount: Integer;
FDropDownWidth: Integer;
FListBoxStyle: TListBoxStyle;
procedure OnTimer(Sender: TObject);
function GetItemIndex: Integer;
procedure SetItemIndex(AValue: Integer);
function GetInterval: Cardinal;
procedure SetInterval(AValue: Cardinal);
function GetItems: TStrings;
protected
function DoKeyDown(Key: Word; Shift: TShiftState): Boolean; virtual;
procedure DoKeyPress(Key: Char); virtual;
procedure FindSelItem(var Eq: Boolean); virtual; abstract;
procedure MakeItems; virtual; abstract;
procedure ReplaceWordItemIndex(SubStrStart: Integer); virtual; abstract;
function GetTemplateCount: Integer; virtual; abstract;
function GetIdentifierCount: Integer; virtual; abstract;
function GetAnsiSeparator: AnsiString; virtual; abstract;
function GetItemCount: Integer;
property JvEditor: TJvCustomEditorBase read FJvEditor;
property Items: TStrings read GetItems;
public
constructor Create(AJvEditor: TJvCustomEditorBase);
destructor Destroy; override;
procedure DropDown(const AMode: TCompletionList; const ShowAlways: Boolean);
procedure DoCompletion(const AMode: TCompletionList);
procedure CloseUp(const Apply: Boolean);
procedure SelectItem;
property ItemIndex: Integer read GetItemIndex write SetItemIndex;
property Visible: Boolean read FVisible write FVisible;
property Mode: TCompletionList read FMode write FMode;
published
property DropDownCount: Integer read FDropDownCount write FDropDownCount default 6;
property DropDownWidth: Integer read FDropDownWidth write FDropDownWidth default 300;
property Enabled: Boolean read FEnabled write FEnabled default False;
property ItemHeight: Integer read FItemHeight write FItemHeight;
property Interval: Cardinal read GetInterval write SetInterval;
property ListBoxStyle: TListBoxStyle read FListBoxStyle write FListBoxStyle;
end;
//=== Highligther Editor =====================================================
type
TJvHighlighter = (hlNone, hlPascal, hlCBuilder, hlSql, hlPython, hlJava, hlJScript, hlVB,
hlHtml, hlPerl, hlIni, hlCocoR, hlPhp, hlNQC, hlCSharp,
hlSyntaxHighlighter);
TLongTokenType = 0..255;
const
lgNone = TLongTokenType(0);
lgComment1 = TLongTokenType(1);
lgComment2 = TLongTokenType(2);
lgString = TLongTokenType(4);
lgTag = TLongTokenType(5);
lgPreproc = TLongTokenType(6);
lgPreproc1 = lgPreproc;
lgPreproc2 = TLongTokenType(7);
lgUndefined = High(TLongTokenType);
type
TDelphiColor = record
ForeColor, BackColor: TColor;
Style: TFontStyles;
end;
const
DelphiColor_Comment: TDelphiColor = (ForeColor: clNavy; BackColor: clWindow; Style: [fsItalic]);
DelphiColor_Preproc: TDelphiColor = (ForeColor: clGreen; BackColor: clWindow; Style: []);
DelphiColor_Number: TDelphiColor = (ForeColor: clNavy; BackColor: clWindow; Style: []);
DelphiColor_Strings: TDelphiColor = (ForeColor: clBlue; BackColor: clWindow; Style: []);
DelphiColor_Symbol: TDelphiColor = (ForeColor: clBlack; BackColor: clWindow; Style: []);
DelphiColor_Reserved: TDelphiColor = (ForeColor: clBlack; BackColor: clWindow; Style: [fsBold]);
DelphiColor_Identifier: TDelphiColor = (ForeColor: clBlack; BackColor: clWindow; Style: []);
DelphiColor_PlainText: TDelphiColor = (ForeColor: clWindowText; BackColor: clWindow; Style: []);
type
TJvSymbolColor = class(TPersistent)
private
FStyle: TFontStyles;
FForeColor: TColor;
FBackColor: TColor;
public
constructor Create;
procedure SetColor(const ForeColor, BackColor: TColor; const Style: TFontStyles);
procedure Assign(Source: TPersistent); override;
published
property Style: TFontStyles read FStyle write FStyle default [];
property ForeColor: TColor read FForeColor write FForeColor {default clWindowText}; // disabled, otherwise the default values are ignored
property BackColor: TColor read FBackColor write FBackColor {default clWindow};
end;
TJvColors = class(TPersistent)
private
FComment: TJvSymbolColor;
FNumber: TJvSymbolColor;
FString: TJvSymbolColor;
FSymbol: TJvSymbolColor;
FReserved: TJvSymbolColor;
FIdentifier: TJvSymbolColor;
FPreproc: TJvSymbolColor;
FFunctionCall: TJvSymbolColor;
FDeclaration: TJvSymbolColor;
FStatement: TJvSymbolColor;
FPlainText: TJvSymbolColor;
public
constructor Create;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Comment: TJvSymbolColor read FComment write FComment;
property Number: TJvSymbolColor read FNumber write FNumber;
property Strings: TJvSymbolColor read FString write FString;
property Symbol: TJvSymbolColor read FSymbol write FSymbol;
property Reserved: TJvSymbolColor read FReserved write FReserved;
property Identifier: TJvSymbolColor read FIdentifier write FIdentifier;
property Preproc: TJvSymbolColor read FPreproc write FPreproc;
property FunctionCall: TJvSymbolColor read FFunctionCall write FFunctionCall;
property Declaration: TJvSymbolColor read FDeclaration write FDeclaration;
property Statement: TJvSymbolColor read FStatement write FStatement;
property PlainText: TJvSymbolColor read FPlainText write FPlainText;
end;
IJvHLEditor = interface
['{E165FE73-AE7E-40A8-AC9B-7FD20D55A15E}']
function GetColors: TJvColors;
procedure SetColors(const Value: TJvColors);
function GetSyntaxHighlighting: Boolean;
procedure SetSyntaxHighlighting(Value: Boolean);
function GetHighlighter: TJvHighlighter;
procedure SetHighlighter(const Value: TJvHighlighter);
property Colors: TJvColors read GetColors write SetColors;
property SyntaxHighlighting: Boolean read GetSyntaxHighlighting write SetSyntaxHighlighting;
property Highlighter: TJvHighlighter read GetHighlighter write SetHighlighter;
end;
const
{ Editor commands }
{ When add new commands, please add them into JvInterpreter_JvEditor.pas unit also ! }
ecCharFirst = $00;
ecCharLast = $FF;
ecCommandFirst = $100;
ecIntern = $1000; { use on internal updates }
ecUser = $8000; { use this for descendants }
{Cursor}
ecLeft = ecCommandFirst + 1;
ecUp = ecLeft + 1;
ecRight = ecLeft + 2;
ecDown = ecLeft + 3;
{Cursor with select}
ecSelLeft = ecCommandFirst + 9;
ecSelUp = ecSelLeft + 1;
ecSelRight = ecSelLeft + 2;
ecSelDown = ecSelLeft + 3;
{Cursor with column select}
ecSelColumnLeft = ecIntern + 0;
ecSelColumnUp = ecSelColumnLeft + 1;
ecSelColumnRight = ecSelColumnLeft + 2;
ecSelColumnDown = ecSelColumnLeft + 3;
{Cursor On words [translated] }
ecPrevWord = ecSelDown + 1;
ecNextWord = ecPrevWord + 1;
ecSelPrevWord = ecPrevWord + 2;
ecSelNextWord = ecPrevWord + 3;
ecSelWord = ecPrevWord + 4;
ecWindowTop = ecSelWord + 1;
ecWindowBottom = ecWindowTop + 1;
ecPrevPage = ecWindowTop + 2;
ecNextPage = ecWindowTop + 3;
ecSelPrevPage = ecWindowTop + 4;
ecSelNextPage = ecWindowTop + 5;
ecBeginLine = ecSelNextPage + 1;
ecEndLine = ecBeginLine + 1;
ecBeginDoc = ecBeginLine + 2;
ecEndDoc = ecBeginLine + 3;
ecSelBeginLine = ecBeginLine + 4;
ecSelEndLine = ecBeginLine + 5;
ecSelBeginDoc = ecBeginLine + 6;
ecSelEndDoc = ecBeginLine + 7;
ecSelAll = ecBeginLine + 8;
ecScrollLineUp = ecSelAll + 1;
ecScrollLineDown = ecScrollLineUp + 1;
ecInclusiveBlock = ecCommandFirst + 100;
ecLineBlock = ecCommandFirst + 101;
ecColumnBlock = ecCommandFirst + 102;
ecNonInclusiveBlock = ecCommandFirst + 103;
ecInsertPara = ecCommandFirst + 121;
ecBackspace = ecInsertPara + 1;
ecDelete = ecInsertPara + 2;
ecChangeInsertMode = ecInsertPara + 3;
ecTab = ecInsertPara + 4;
ecBackTab = ecInsertPara + 5;
ecIndent = ecInsertPara + 6;
ecUnindent = ecInsertPara + 7;
ecBackspaceWord = ecIntern + 10;
ecDeleteSelected = ecInsertPara + 10;
ecClipboardCopy = ecInsertPara + 11;
ecClipboardCut = ecClipboardCopy + 1;
ecClipboardPaste = ecClipboardCopy + 2;
ecDeleteLine = ecClipboardPaste + 1;
ecDeleteWord = ecDeleteLine + 1;
ecToUpperCase = ecDeleteLine + 2;
ecToLowerCase = ecToUpperCase + 1;
ecChangeCase = ecToUpperCase + 2;
ecUndo = ecChangeCase + 1;
ecRedo = ecUndo + 1;
ecBeginCompound = ecUndo + 2;
ecEndCompound = ecUndo + 3;
ecBeginUpdate = ecUndo + 4;
ecEndUpdate = ecUndo + 5;
ecSetBookmark0 = ecEndUpdate + 1;
ecSetBookmark1 = ecSetBookmark0 + 1;
ecSetBookmark2 = ecSetBookmark0 + 2;
ecSetBookmark3 = ecSetBookmark0 + 3;
ecSetBookmark4 = ecSetBookmark0 + 4;
ecSetBookmark5 = ecSetBookmark0 + 5;
ecSetBookmark6 = ecSetBookmark0 + 6;
ecSetBookmark7 = ecSetBookmark0 + 7;
ecSetBookmark8 = ecSetBookmark0 + 8;
ecSetBookmark9 = ecSetBookmark0 + 9;
ecGotoBookmark0 = ecSetBookmark9 + 1;
ecGotoBookmark1 = ecGotoBookmark0 + 1;
ecGotoBookmark2 = ecGotoBookmark0 + 2;
ecGotoBookmark3 = ecGotoBookmark0 + 3;
ecGotoBookmark4 = ecGotoBookmark0 + 4;
ecGotoBookmark5 = ecGotoBookmark0 + 5;
ecGotoBookmark6 = ecGotoBookmark0 + 6;
ecGotoBookmark7 = ecGotoBookmark0 + 7;
ecGotoBookmark8 = ecGotoBookmark0 + 8;
ecGotoBookmark9 = ecGotoBookmark0 + 9;
ecCompletionIdentifiers = ecGotoBookmark9 + 1;
ecCompletionTemplates = ecCompletionIdentifiers + 1;
ecRecordMacro = ecCompletionTemplates + 1;
ecPlayMacro = ecRecordMacro + 1;
ecBeginRecord = ecRecordMacro + 2;
ecEndRecord = ecRecordMacro + 3;
twoKeyCommand = High(Word);
function KeyPressed(VK: Integer): Boolean;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile$';
Revision: '$Revision: 10484 $';
Date: '$Date: 2006-04-14 03:36:04 -0700 (Fri, 14 Apr 2006) $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
Consts,
{$IFDEF HAS_UNIT_RTLCONSTS}
RTLConsts,
{$ENDIF HAS_UNIT_RTLCONSTS}
Math, Clipbrd,
rm_JvJCLUtils, rm_JvThemes, rm_JvConsts, rm_JvResources;
type
TJvEditorCompletionList = class(TListBox)
private
FTimer: TTimer;
YY: Integer;
// HintWindow : THintWindow;
procedure CMHintShow(var Msg: TMessage); message CM_HINTSHOW;
procedure WMCancelMode(var Msg: TMessage); message WM_CancelMode;
procedure OnTimer(Sender: TObject);
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
function KeyPressed(VK: Integer): Boolean;
begin
Result := GetKeyState(VK) and $8000 = $8000;
end;
//=== { TJvUndoBuffer } ======================================================
procedure RedoNotImplemented;
begin
raise EJvEditorError.CreateRes(@RsERedoNotYetImplemented);
end;
procedure TJvUndoBuffer.Add(AUndo: TJvUndo);
begin
if InUndo then
Exit;
ClearRedo;
inherited Add(AUndo);
FPtr := Count - 1;
end;
procedure TJvUndoBuffer.Undo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -