home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sibylft1.zip / DOC.DAT / DOC / SPCC / EDITORS.PAS < prev    next >
Pascal/Delphi Source File  |  1997-04-07  |  27KB  |  612 lines

  1.  
  2. {╔══════════════════════════════════════════════════════════════════════════╗
  3.  ║                                                                          ║
  4.  ║     Sibyl Portable Component Classes                                     ║
  5.  ║                                                                          ║
  6.  ║     Copyright (c) 1995,97 SpeedSoft Germany,   All rights reserved.      ║
  7.  ║                                                                          ║
  8.  ╚══════════════════════════════════════════════════════════════════════════╝}
  9.  
  10. UNIT Editors;
  11.  
  12.  
  13. INTERFACE
  14.  
  15. {$IFDEF OS2}
  16. USES PMWin;
  17. {$ENDIF}
  18. {$IFDEF WIN95}
  19. USES WinUser;
  20. {$ENDIF}
  21.  
  22. USES Messages,Dos,SysUtils,Classes,Forms,StdCtrls,Dialogs;
  23.  
  24.  
  25. CONST
  26.      NormalChars : SET OF CHAR = ['0'..'9','A'..'Z','a'..'z','_',
  27.                                   'ä','Ä','ö','Ö','ü','Ü','ß'];
  28.      StringLength        = 255;
  29.  
  30.      ciNormal            = 0;
  31.      ciBookMark0         = 1;
  32.      ciBookMarkMask      = 1 + 2 + 4 + 8;
  33.      ciSelected          = 16;
  34.  
  35.      {codes for TColorArray}
  36.      fgcPlainText        = 0;
  37.      bgcPlainText        = 1;
  38.      fgcMarkedBlock      = 2;
  39.      bgcMarkedBlock      = 3;
  40.      fgcSearchMatch      = 4;
  41.      bgcSearchMatch      = 5;
  42.      fgcRightMargin      = 6;
  43.  
  44.      kbPreCtrlK          = kb_Ctrl + 8192;
  45.      kbPreCtrlQ          = kb_Ctrl + 16384;
  46.      kbPreCtrlO          = kb_Ctrl + 32768;
  47.      kbPreCtrlU          = kb_Ctrl + 65536;
  48.  
  49.      {Ctrl-K Codes}
  50.      kbCtrlKA            = kbPreCtrlK + kb_Char + 97;
  51.      kbCtrlKB            = kbPreCtrlK + kb_Char + 98;
  52.      kbCtrlKC            = kbPreCtrlK + kb_Char + 99;
  53.      kbCtrlKD            = kbPreCtrlK + kb_Char + 100;
  54.      kbCtrlKE            = kbPreCtrlK + kb_Char + 101;
  55.      kbCtrlKF            = kbPreCtrlK + kb_Char + 102;
  56.      kbCtrlKG            = kbPreCtrlK + kb_Char + 103;
  57.      kbCtrlKH            = kbPreCtrlK + kb_Char + 104;
  58.      kbCtrlKI            = kbPreCtrlK + kb_Char + 105;
  59.      kbCtrlKJ            = kbPreCtrlK + kb_Char + 106;
  60.      kbCtrlKK            = kbPreCtrlK + kb_Char + 107;
  61.      kbCtrlKL            = kbPreCtrlK + kb_Char + 108;
  62.      kbCtrlKM            = kbPreCtrlK + kb_Char + 109;
  63.      kbCtrlKN            = kbPreCtrlK + kb_Char + 110;
  64.      kbCtrlKO            = kbPreCtrlK + kb_Char + 111;
  65.      kbCtrlKP            = kbPreCtrlK + kb_Char + 112;
  66.      kbCtrlKQ            = kbPreCtrlK + kb_Char + 113;
  67.      kbCtrlKR            = kbPreCtrlK + kb_Char + 114;
  68.      kbCtrlKS            = kbPreCtrlK + kb_Char + 115;
  69.      kbCtrlKT            = kbPreCtrlK + kb_Char + 116;
  70.      kbCtrlKU            = kbPreCtrlK + kb_Char + 117;
  71.      kbCtrlKV            = kbPreCtrlK + kb_Char + 118;
  72.      kbCtrlKW            = kbPreCtrlK + kb_Char + 119;
  73.      kbCtrlKX            = kbPreCtrlK + kb_Char + 120;
  74.      kbCtrlKY            = kbPreCtrlK + kb_Char + 121;
  75.      kbCtrlKZ            = kbPreCtrlK + kb_Char + 122;
  76.  
  77.      {Ctrl-Q Codes}
  78.      kbCtrlQA            = kbPreCtrlQ + kb_Char + 97;
  79.      kbCtrlQB            = kbPreCtrlQ + kb_Char + 98;
  80.      kbCtrlQC            = kbPreCtrlQ + kb_Char + 99;
  81.      kbCtrlQD            = kbPreCtrlQ + kb_Char + 100;
  82.      kbCtrlQE            = kbPreCtrlQ + kb_Char + 101;
  83.      kbCtrlQF            = kbPreCtrlQ + kb_Char + 102;
  84.      kbCtrlQG            = kbPreCtrlQ + kb_Char + 103;
  85.      kbCtrlQH            = kbPreCtrlQ + kb_Char + 104;
  86.      kbCtrlQI            = kbPreCtrlQ + kb_Char + 105;
  87.      kbCtrlQJ            = kbPreCtrlQ + kb_Char + 106;
  88.      kbCtrlQK            = kbPreCtrlQ + kb_Char + 107;
  89.      kbCtrlQL            = kbPreCtrlQ + kb_Char + 108;
  90.      kbCtrlQM            = kbPreCtrlQ + kb_Char + 109;
  91.      kbCtrlQN            = kbPreCtrlQ + kb_Char + 110;
  92.      kbCtrlQO            = kbPreCtrlQ + kb_Char + 111;
  93.      kbCtrlQP            = kbPreCtrlQ + kb_Char + 112;
  94.      kbCtrlQQ            = kbPreCtrlQ + kb_Char + 113;
  95.      kbCtrlQR            = kbPreCtrlQ + kb_Char + 114;
  96.      kbCtrlQS            = kbPreCtrlQ + kb_Char + 115;
  97.      kbCtrlQT            = kbPreCtrlQ + kb_Char + 116;
  98.      kbCtrlQU            = kbPreCtrlQ + kb_Char + 117;
  99.      kbCtrlQV            = kbPreCtrlQ + kb_Char + 118;
  100.      kbCtrlQW            = kbPreCtrlQ + kb_Char + 119;
  101.      kbCtrlQX            = kbPreCtrlQ + kb_Char + 120;
  102.      kbCtrlQY            = kbPreCtrlQ + kb_Char + 121;
  103.      kbCtrlQZ            = kbPreCtrlQ + kb_Char + 122;
  104.  
  105.      kbCtrlShiftP        = kb_Ctrl + kb_Shift + kb_Char + 80;
  106.      kbCtrlShiftR        = kb_Ctrl + kb_Shift + kb_Char + 82;
  107.      kbCtrlShiftS        = kb_Ctrl + kb_Shift + kb_Char + 83;
  108.      kbCtrlShiftI        = kb_Ctrl + kb_Shift + kb_Char + 73;
  109.      kbCtrlShiftU        = kb_Ctrl + kb_Shift + kb_Char + 85;
  110.      kbCtrlShiftY        = kb_Ctrl + kb_Shift + kb_Char + 89;
  111.      kbCtrlShiftZ        = kb_Ctrl + kb_Shift + kb_Char + 90;
  112.      kbCtrlSlash         = kb_Ctrl + kb_Shift + kb_Char + 47;
  113.      kbCtrlBackSlash     = kb_Ctrl + kb_Shift + kb_Char + 92;
  114.  
  115.      kbCtrlShiftCLeft    = kb_Ctrl + kb_Shift + kbCLeft;
  116.      kbCtrlShiftCRight   = kb_Ctrl + kb_Shift + kbCRight;
  117.      kbCtrlShiftHome     = kb_Ctrl + kb_Shift + kbHome;
  118.      kbCtrlShiftEnd      = kb_Ctrl + kb_Shift + kbEnd;
  119.      kbCtrlShiftPageUp   = kb_Ctrl + kb_Shift + kbPageUp;
  120.      kbCtrlShiftPageDown = kb_Ctrl + kb_Shift + kbPageDown;
  121.  
  122.      kbCtrlAltShiftCLeft = kb_Ctrl + kb_Alt + kb_Shift + kbCLeft;
  123.      kbCtrlAltShiftCRight= kb_Ctrl + kb_Alt + kb_Shift + kbCRight;
  124.      kbCtrlAltShiftHome  = kb_Ctrl + kb_Alt + kb_Shift + kbHome;
  125.      kbCtrlAltShiftEnd   = kb_Ctrl + kb_Alt + kb_Shift + kbEnd;
  126.      kbCtrlAltShiftPageUp= kb_Ctrl + kb_Alt + kb_Shift + kbPageUp;
  127.      kbCtrlAltShiftPageDown = kb_Ctrl + kb_Alt + kb_Shift + kbPageDown;
  128.  
  129.      kbAltShiftBkSp      = kb_Alt + kb_Shift + kbBkSp;
  130.      kbAltShiftCLeft     = kb_Alt + kb_Shift + kbCLeft;
  131.      kbAltShiftCRight    = kb_Alt + kb_Shift + kbCRight;
  132.      kbAltShiftCUp       = kb_Alt + kb_Shift + kbCUp;
  133.      kbAltShiftCDown     = kb_Alt + kb_Shift + kbCDown;
  134.      kbAltShiftPageUp    = kb_Alt + kb_Shift + kbPageUp;
  135.      kbAltShiftPageDown  = kb_Alt + kb_Shift + kbPageDown;
  136.      kbAltShiftHome      = kb_Alt + kb_Shift + kbHome;
  137.      kbAltShiftEnd       = kb_Alt + kb_Shift + kbEnd;
  138.  
  139.      kbCtrlOC            = kbPreCtrlO + kb_Char + 99;
  140.      kbCtrlOK            = kbPreCtrlO + kb_Char + 107;
  141.      kbCtrlOU            = kbPreCtrlO + kb_Char + 117;
  142.      kbCtrlK0            = kbPreCtrlK + kb_Char + 48;
  143.      kbCtrlK9            = kbPreCtrlK + kb_Char + 57;
  144.      kbCtrlQ0            = kbPreCtrlQ + kb_Char + 48;
  145.      kbCtrlQ9            = kbPreCtrlQ + kb_Char + 57;
  146.      kbCtrlU0            = kbPreCtrlU + kb_Char + 48;
  147.      kbCtrlU9            = kbPreCtrlU + kb_Char + 57;
  148.      kbCtrlUU            = kbPreCtrlU + kb_Char + 117;
  149.  
  150.  
  151. TYPE
  152.     PLine=^TLine;
  153.     TLine=RECORD
  154.          prev: PLine;
  155.          zk:   PSTRING;
  156.          flag: LONGWORD;
  157.          add:  LONGWORD;
  158.          next: PLine;
  159.     END;
  160.  
  161.     TColorTable=ARRAY[0..255] OF TColor;
  162.  
  163.     TColorIndex=RECORD
  164.          Fgc: BYTE;
  165.          Bgc: BYTE;
  166.     END;
  167.  
  168.     TColorArray=ARRAY[1..StringLength] OF TColorIndex;
  169.  
  170.     TEditorPos=RECORD
  171.          Y: LONGINT;
  172.          X: INTEGER;
  173.     END;
  174.  
  175.     TLineX=RECORD
  176.          Line: PLine;
  177.          X: INTEGER;
  178.     END;
  179.  
  180.     TICB=RECORD                               {Internal Clipboard}
  181.          First: TLineX;
  182.          Last: TLineX;
  183.     END;
  184.  
  185.     TUndoGroup=(ugNoGroup,ugGroup,ugCursorMove,
  186.          ugInsertChar,ugOverwriteChar,ugDeleteChar,ugBackspaceChar,
  187.          ugDeleteActLine,ugDeleteRightWord,ugBlockLeft,ugBlockRight,
  188.          ugBreakLine,ugEnter,ugTabulator,
  189.          ugInsertLine,ugDeleteLine,ugReplaceLine);
  190.  
  191.     PUndo=^TUndo;
  192.     TUndo=RECORD
  193.          Memory: BOOLEAN;
  194.          EventType: TUndoGroup;
  195.          Modified: BOOLEAN;
  196.          ICBFL: LONGINT;
  197.          ICBFX: INTEGER;
  198.          ICBLL: LONGINT;
  199.          ICBLX: INTEGER;
  200.          FFileCursor: TEditorPos;
  201.          FrameBegin: LONGINT;
  202.          FrameEnd: LONGINT;
  203.          FirstUndoLine: PLine;
  204.          LastUndoLine: PLine;
  205.          Lines: LONGINT;
  206.     END;
  207.  
  208. {$M+}
  209.     TEditOpt=SET OF (eoCreateBackups,eoAppendBAK,eoAutoIndent,
  210.          eoUnindent,eoUndoGroups,eoCursorClimb,
  211.          eoPersistentBlocks,eoOverwriteBlock,
  212.          eoAutoSave,eo2ClickLine,eoSmartTabs,eoHomeFirstWord);
  213.  
  214.     TKeystrokeMap=(kmWordStar,kmCUA,kmDefault{,kmBrief,kmEpsilon});
  215. {$M-}
  216.  
  217.     TCursorShape=(csUnderline,csVertical);
  218.  
  219.     TSelectMode=(smNonInklusiveBlock,smColumnBlock);
  220.  
  221.     TICBPosition=SET OF (ipBeforeICBFirst,ipAfterICBFirst,ipWithinICB,
  222.          ipBeforeICBLast,ipAfterICBLast);
  223.  
  224.     TFindAction=(faNothing,faFind,faReplace,faIncSearch);
  225.  
  226.     TFindReplace=RECORD
  227.          find: STRING;
  228.          replace: STRING;
  229.          direction: TFindDirection;
  230.          origin: TFindOrigin;
  231.          scope: TFindScope;
  232.          options: TFindOptions;
  233.          confirm: BOOLEAN;
  234.          replall: BOOLEAN;
  235.     END;
  236.  
  237.  
  238.     TEditor=CLASS(TForm)
  239.       PRIVATE
  240.          FCaret: TCaret;
  241.          FOldCaption: STRING;
  242.          FKeyMap: TKeystrokeMap;
  243.          FInsertMode: BOOLEAN;
  244.          FReadOnly: BOOLEAN;
  245.          FModified: BOOLEAN;
  246.          FUntitled: BOOLEAN;
  247.          FEditOpt: TEditOpt;
  248.          FTabSize: INTEGER;
  249.          FCountLines: LONGINT;
  250.          FBottomScrollBar: TScrollBar;
  251.          FRightScrollBar: TScrollBar;
  252.          ClientArea: TRect;
  253.          IgnoreRedraw: INTEGER;
  254.          FWinSize: TPoint;
  255.          FFileCursor: TEditorPos;
  256.          FScrCursor: TEditorPos;
  257.          FFirstLine: PLine;
  258.          FLastLine: PLine;
  259.          FActLine: PLine;
  260.          FTopScreenLine: PLine;
  261.          WLactivated: BOOLEAN;
  262.          FWorkLine: STRING;
  263.          ICB: TICB;
  264.          ICBVisible: BOOLEAN;
  265.          MaxUndo: LONGINT;
  266.          KeyRepeat: INTEGER;
  267.          FPreCtrl: TKeyCode;
  268.          BookMarkX: ARRAY[1..10] OF INTEGER;
  269.          HadFocus: INTEGER;
  270.          IncSearchList: TList;
  271.          IncSearchText: STRING;
  272.          FindICB: TICB;
  273.          FMask: STRING;
  274.          FSelColor: TColor;
  275.          FSelBackColor: TColor;
  276.          FFoundColor: TColor;
  277.          FFoundBackColor: TColor;
  278.          FWrapLineColor: TColor;
  279.          FSaveEvents: INTEGER;
  280.          FEventsCounter: INTEGER;
  281.          WrapLineX: INTEGER;
  282.          ScrOffsX: INTEGER;
  283.          FFileName: STRING;
  284.          FMacroList: TList;
  285.          FRecording: BOOLEAN;
  286.          FPlaying: BOOLEAN;
  287.          FCursorShape: TCursorShape;
  288.          FSelectMode: TSelectMode;
  289.          FWordWrap: BOOLEAN;
  290.          FWordWrapColumn: INTEGER;
  291.          FFindReplace: TFindReplace;
  292.          FLastFind: TFindAction;
  293.          FBorderWidth: LONGINT;
  294.          FCtl3D: BOOLEAN;
  295.          FUndoList: TList;
  296.          FRedoList: TList;
  297.          FTempFileName: STRING;
  298.          FDragRect: TRect;
  299.          IsDBCSFont: BOOLEAN;
  300.          PROCEDURE CalcSizes;
  301.          PROCEDURE SetFont(NewFont:TFont);OVERRIDE;
  302.          PROCEDURE SetCtl3D(Value:BOOLEAN);
  303.          PROCEDURE SetKeyMap(km:TKeystrokeMap);
  304.          PROCEDURE SetInsertMode(im:BOOLEAN);
  305.          PROCEDURE ToggleInsertMode;
  306.          PROCEDURE SetEditOpt(eo:TEditOpt);
  307.          PROCEDURE SetTabSize(ts:INTEGER);
  308.          PROCEDURE SetSaveEvents(cnt:INTEGER);
  309.          PROCEDURE SetLastUndoGroup(ug:TUndoGroup);
  310.          FUNCTION GetLastUndoGroup:TUndoGroup;
  311.          PROCEDURE SetCursorShape(cs:TCursorShape);
  312.          PROCEDURE SetSelectMode(sm:TSelectMode);
  313.          PROCEDURE SetWordWrap(wrap:BOOLEAN);
  314.          PROCEDURE SetWordWrapColumn(column:INTEGER);
  315.          FUNCTION GetUndoCount:LONGINT;
  316.          FUNCTION GetRedoCount:LONGINT;
  317.          {Basic Structure}
  318.          FUNCTION _Index2PLine(y:LONGINT):PLine;
  319.          FUNCTION _PLine2Index(pl:PLine):LONGINT;
  320.          FUNCTION _PLine2PString(pl:PLine):PSTRING;
  321.          FUNCTION _Connect(pl1,pl2:PLine):BOOLEAN;
  322.          FUNCTION _CountLines(pl1,pl2:PLine):LONGINT;
  323.          {Undo/Redo}
  324.          FUNCTION _CountUndoLines(FirstL,LastL:PLine):LONGINT;
  325.          PROCEDURE _StoreUndoCursor(List:TList);
  326.          FUNCTION _CopyUndoLines(FirstL,LastL:PLine):LONGINT;
  327.          FUNCTION _MoveUndoLines(List:TList;FirstL,LastL:PLine):LONGINT;
  328.          PROCEDURE _CreateUndoEvent(List:TList;U:PUndo);
  329.          PROCEDURE _UpdateLastUndoEvent(List:TList;Index:LONGINT);
  330.          PROCEDURE _FreeUndoEvent(List:TObject;Item:POINTER);
  331.          PROCEDURE _SetMaxUndo(cnt:LONGINT);
  332.          {WorkLine Manipulation}
  333.          PROCEDURE _ReadWorkLine;
  334.          PROCEDURE _WriteWorkLine;
  335.          FUNCTION _WriteString(x:INTEGER; s:STRING):BOOLEAN;
  336.          FUNCTION _InsertString(x:INTEGER; s:STRING):BOOLEAN;
  337.          FUNCTION _DeleteString(x,cx:INTEGER):BOOLEAN;
  338.          FUNCTION _ReadString(pl:PLine; x,cx:INTEGER):STRING;
  339.          PROCEDURE _Set(y:LONGINT;CONST s:STRING);
  340.          FUNCTION _Get(y:LONGINT):STRING;
  341.          FUNCTION _FindBookMark(i:BYTE):PLine;
  342.          FUNCTION _FindNextTab(pl:PLine; x:INTEGER):INTEGER;
  343.          {Insert/Delete Lines}
  344.          FUNCTION _InsertLine(pl:PLine):PLine;
  345.          FUNCTION _DeleteLine(pl:PLine):PLine;
  346.          {Text Block Operations}
  347.          FUNCTION _GetFileText(s:STRING; VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
  348.          FUNCTION _GetEditorText(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
  349.          FUNCTION _GetEditorBlock(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
  350.          PROCEDURE _InsertText(p:POINTER; Len:LONGINT; marknew:BOOLEAN);
  351.          {Caret Movement}
  352.          FUNCTION _HorizMove:BOOLEAN;
  353.          FUNCTION _GotoPosition(p:TEditorPos):BOOLEAN;
  354.          FUNCTION _CursorDown:BOOLEAN;
  355.          FUNCTION _CursorUp:BOOLEAN;
  356.          FUNCTION _CursorRight:BOOLEAN;
  357.          FUNCTION _CursorLeft:BOOLEAN;
  358.          FUNCTION _CursorHome:BOOLEAN;
  359.          FUNCTION _CursorEnd:BOOLEAN;
  360.          FUNCTION _CursorPageDown:BOOLEAN;
  361.          FUNCTION _CursorPageUp:BOOLEAN;
  362.          FUNCTION _CursorRollUp:BOOLEAN;
  363.          FUNCTION _CursorRollDown:BOOLEAN;
  364.          FUNCTION _CursorWordRight:BOOLEAN;
  365.          FUNCTION _CursorWordLeft:BOOLEAN;
  366.          {Selection}
  367.          FUNCTION _ICBExist:BOOLEAN;
  368.          FUNCTION _ICBPersistent:BOOLEAN;
  369.          FUNCTION _ICBOverwrite:BOOLEAN;
  370.          FUNCTION _ICBClearICB:BOOLEAN;
  371.          FUNCTION _ICBClearMark:BOOLEAN;
  372.          FUNCTION _ICBSetMark:BOOLEAN;
  373.          FUNCTION _ICBDeleteICB:BOOLEAN;
  374.          PROCEDURE _ICBCheckX;
  375.          PROCEDURE _ICBSetBegin(pl:PLine; x:INTEGER);
  376.          PROCEDURE _ICBSetEnd(pl:PLine; x:INTEGER);
  377.          FUNCTION _ICBPos(pl:PLine; x:INTEGER):TICBPosition;
  378.          {Extend Selection}
  379.          FUNCTION _ICBActPos:TLineX;
  380.          FUNCTION _ICBExtSetICB:BOOLEAN;
  381.          FUNCTION _ICBExtCorrectICB:BOOLEAN;
  382.          FUNCTION _ICBExtCorrectICB2:BOOLEAN;
  383.          FUNCTION _ICBTestIEW(VAR y1,y2:INTEGER):BOOLEAN;
  384.          {ClipBoard}
  385.          FUNCTION _SetClipBoardText(p:POINTER; Len:LONGINT):BOOLEAN;
  386.          FUNCTION _GetClipBoardText(VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
  387.       PROTECTED
  388.          IndentRect: TRect;
  389.          PROCEDURE SetupComponent;OVERRIDE;
  390.          PROCEDURE SetupShow;OVERRIDE;
  391.          FUNCTION CloseQuery:BOOLEAN;OVERRIDE;
  392.          PROCEDURE CharEvent(VAR Msg:TWMChar;VAR ch:CHAR;RepeatCount:BYTE);OVERRIDE;
  393.          PROCEDURE ScanEvent(VAR Msg:TWMChar;VAR Keycode:TKeyCode;RepeatCount:BYTE);OVERRIDE;
  394.          PROCEDURE SetFocus;OVERRIDE;
  395.          PROCEDURE KillFocus;OVERRIDE;
  396.          PROCEDURE Resize;OVERRIDE;
  397.          PROCEDURE MouseDown(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  398.          PROCEDURE MouseUp(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  399.          PROCEDURE MouseMove(ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  400.          PROCEDURE MouseDblClick(Button:TMouseButton;ShiftState:TShiftState;X,Y:LONGINT);OVERRIDE;
  401.          PROCEDURE Scroll(Sender:TScrollBar;ScrollCode:TScrollCode;VAR ScrollPos:LONGINT);OVERRIDE;
  402.          PROCEDURE CanDrag(X,Y:LONGINT;VAR Accept:BOOLEAN);OVERRIDE;
  403.          PROCEDURE DoStartDrag(VAR DragData:TDragDropData);OVERRIDE;
  404.          PROCEDURE DoEndDrag(Target:TObject; X,Y:LONGINT);OVERRIDE;
  405.          PROCEDURE DragOver(Source:TObject;X,Y:LONGINT;State:TDragState;VAR Accept:BOOLEAN);OVERRIDE;
  406.          PROCEDURE SetSliderValues;
  407.          PROCEDURE SetSliderPosition;
  408.          PROCEDURE FlushWorkLine;
  409.          FUNCTION GetCursorFromMouse(pt:TPoint):TEditorPos;
  410.          FUNCTION GetMouseFromCursor(pos:TEditorPos):TPoint;
  411.          {Caret Movement}
  412.          PROCEDURE cmCursorDown;
  413.          PROCEDURE cmCursorUp;
  414.          PROCEDURE cmCursorRight;
  415.          PROCEDURE cmCursorLeft;
  416.          PROCEDURE cmCursorHome;
  417.          PROCEDURE cmCursorEnd;
  418.          PROCEDURE cmCursorPageDown;
  419.          PROCEDURE cmCursorPageUp;
  420.          PROCEDURE cmCursorRollUp;
  421.          PROCEDURE cmCursorRollDown;
  422.          PROCEDURE cmCursorWordRight;
  423.          PROCEDURE cmCursorWordLeft;
  424.          PROCEDURE cmCursorFileBegin;
  425.          PROCEDURE cmCursorFileEnd;
  426.          PROCEDURE cmCursorPageHome;
  427.          PROCEDURE cmCursorPageEnd;
  428.          {Selection}
  429.          PROCEDURE cmICBExtLeft;
  430.          PROCEDURE cmICBExtRight;
  431.          PROCEDURE cmICBExtUp;
  432.          PROCEDURE cmICBExtDown;
  433.          PROCEDURE cmICBExtPageUp;
  434.          PROCEDURE cmICBExtPageDown;
  435.          PROCEDURE cmICBExtHome;
  436.          PROCEDURE cmICBExtEnd;
  437.          PROCEDURE cmICBExtWordLeft;
  438.          PROCEDURE cmICBExtWordRight;
  439.          PROCEDURE cmICBExtFileBegin;
  440.          PROCEDURE cmICBExtFileEnd;
  441.          PROCEDURE cmICBExtPageBegin;
  442.          PROCEDURE cmICBExtPageEnd;
  443.          {ICB Edit}
  444.          PROCEDURE cmICBReadBlock;VIRTUAL;
  445.          PROCEDURE cmICBWriteBlock;VIRTUAL;
  446.          PROCEDURE cmICBMoveLeft;VIRTUAL;
  447.          PROCEDURE cmICBMoveRight;VIRTUAL;
  448.          PROCEDURE cmICBCopyBlock;VIRTUAL;
  449.          PROCEDURE cmICBMoveBlock;VIRTUAL;
  450.          PROCEDURE cmICBDeleteBlock;VIRTUAL;
  451.          PROCEDURE cmICBUpcaseBlock;VIRTUAL;
  452.          PROCEDURE cmICBLowcaseBlock;VIRTUAL;
  453.          PROCEDURE cmICBUpcaseWord;VIRTUAL;
  454.          PROCEDURE cmICBLowcaseWord;VIRTUAL;
  455.          PROCEDURE cmToggleCase;VIRTUAL;
  456.          {Edit}
  457.          PROCEDURE cmBreakLine;VIRTUAL;
  458.          PROCEDURE cmDeleteLine;VIRTUAL;
  459.          PROCEDURE cmDeleteLineEnd;VIRTUAL;
  460.          PROCEDURE cmDeleteRightWord;VIRTUAL;
  461.          PROCEDURE cmDeleteLeftWord;VIRTUAL;
  462.          PROCEDURE cmTabulator;VIRTUAL;
  463.          PROCEDURE cmPrevTabulator;VIRTUAL;
  464.          PROCEDURE cmDeleteChar;VIRTUAL;
  465.          PROCEDURE cmBackSpace;VIRTUAL;
  466.          PROCEDURE cmEnter;VIRTUAL;
  467.          PROCEDURE cmFindText;VIRTUAL;
  468.          PROCEDURE cmReplaceText;VIRTUAL;
  469.          PROCEDURE cmSearchTextAgain;VIRTUAL;
  470.          PROCEDURE cmIncrementalSearch;VIRTUAL;
  471.          PROCEDURE cmRecordMacro;VIRTUAL;
  472.          PROCEDURE cmPlayMacro;VIRTUAL;
  473.          {Overwrite this methods for personal use}
  474.          FUNCTION GetReadOnly:BOOLEAN;VIRTUAL;
  475.          PROCEDURE SetReadOnly(Value:BOOLEAN);VIRTUAL;
  476.          PROCEDURE SetModified(Value:BOOLEAN);VIRTUAL;
  477.          PROCEDURE UpdateEditorState;VIRTUAL;
  478.          PROCEDURE SetStateMessage(CONST s:STRING);VIRTUAL;
  479.          PROCEDURE SetErrorMessage(CONST s:STRING);VIRTUAL;
  480.          FUNCTION SetQueryMessage(CONST s:STRING;Typ:TMsgDlgType;Buttons:TMsgDlgButtons):TMsgDlgReturn;VIRTUAL;
  481.          FUNCTION SetConfirmMessage:TMsgDlgReturn;VIRTUAL;
  482.          FUNCTION UpdateLineColorFlag(pl:PLine):BOOLEAN;VIRTUAL;
  483.          PROCEDURE SetLineColorFlag(pl1,pl2:PLine);VIRTUAL;
  484.          PROCEDURE CalcLineColor(pl:PLine;VAR LineColor:TColorArray);VIRTUAL;
  485.          PROCEDURE InvalidateScreenLine(ScrY:INTEGER);VIRTUAL;
  486.          PROCEDURE InvalidateWorkLine;VIRTUAL;
  487.          PROCEDURE InvalidateEditor(y1,y2:INTEGER);VIRTUAL;
  488.          PROCEDURE SetScreenCursor;VIRTUAL;
  489.          FUNCTION QueryConvertPos(VAR pos:TPoint):BOOLEAN;OVERRIDE;
  490.          PROCEDURE SetIncSearchText(s:STRING);VIRTUAL;
  491.          FUNCTION SaveToFile(CONST FName:STRING):BOOLEAN;VIRTUAL;
  492.          FUNCTION TestSaveAsName(CONST FName:STRING):TMsgDlgReturn;VIRTUAL;
  493.          PROCEDURE FileNameChange(CONST OldName,NewName:STRING);VIRTUAL;
  494.          PROCEDURE TestAutoSave;VIRTUAL;
  495.          PROCEDURE SetFileName(CONST FName:STRING);VIRTUAL;
  496.          PROCEDURE SetAvailabeFileTypes(CFOD:TOpenDialog);VIRTUAL;
  497.          FUNCTION EmulateWordStar(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
  498.          FUNCTION EmulateCUA(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
  499.          FUNCTION EmulateDefault(VAR KeyCode,PreControl:TKeyCode):BOOLEAN;VIRTUAL;
  500.          PROCEDURE SetColorEntry(ColorIndex:INTEGER;NewColor:TColor);VIRTUAL;
  501.          FUNCTION GetColorEntry(ColorIndex:INTEGER):TColor;VIRTUAL;
  502.          PROPERTY FirstLine:PLine read FFirstLine;
  503.          PROPERTY LastLine:PLine read FLastLine;
  504.          PROPERTY ActLine:PLine read FActLine;
  505.          PROPERTY TopScreenLine:PLine read FTopScreenLine;
  506.          PROPERTY Indices[pl:PLine]:LONGINT read _PLine2Index;
  507.          PROPERTY PLines[Index:LONGINT]:PLine read _Index2PLine;
  508.          PROPERTY PStrings[pl:PLine]:PString read _PLine2PString;
  509.          PROPERTY LastUndoGroup:TUndoGroup read GetLastUndoGroup write SetLastUndoGroup;
  510.          PROPERTY MacroList:TList read FMacroList write FMacroList;
  511.          PROPERTY MacroRecording:BOOLEAN read FRecording;
  512.          PROPERTY MacroPlaying:BOOLEAN read FPlaying;
  513.          PROPERTY LastFind:TFindAction read FLastFind write FLastFind;
  514.       PUBLIC
  515.          DESTRUCTOR Destroy;OVERRIDE;
  516.          PROCEDURE BeginUpdate;
  517.          PROCEDURE EndUpdate;
  518.          PROCEDURE DragDrop(Source:TObject;X,Y:LONGINT);OVERRIDE;
  519.          PROCEDURE Redraw(CONST rc:TRect);OVERRIDE;
  520.          FUNCTION LoadFile(CONST FName:STRING):BOOLEAN;VIRTUAL;
  521.          FUNCTION SaveFile:BOOLEAN;VIRTUAL;
  522.          FUNCTION SaveFileAs(CONST FName:STRING):BOOLEAN;VIRTUAL;
  523.          FUNCTION LoadFromStream(Stream:TStream):BOOLEAN;
  524.          FUNCTION SaveToStream(Stream:TStream):BOOLEAN;
  525.          FUNCTION InsertLine(y:LONGINT;CONST s:STRING):LONGINT;
  526.          FUNCTION DeleteLine(y:LONGINT):LONGINT;
  527.          FUNCTION AppendLine(CONST s:STRING):LONGINT;
  528.          FUNCTION ReplaceLine(y:LONGINT;CONST s:STRING):LONGINT;
  529.          PROCEDURE SetSelectionStart(p:TEditorPos);
  530.          PROCEDURE SetSelectionEnd(p:TEditorPos);
  531.          FUNCTION GetSelectionStart(VAR p:TEditorPos):BOOLEAN;
  532.          FUNCTION GetSelectionEnd(VAR p:TEditorPos):BOOLEAN;
  533.          PROCEDURE SelectLine(p:TEditorPos);
  534.          PROCEDURE SelectWord(p:TEditorPos);
  535.          PROCEDURE SelectAll;
  536.          PROCEDURE DeselectAll;
  537.          PROCEDURE HideSelection;
  538.          PROCEDURE ShowSelection;
  539.          PROCEDURE DeleteSelection;
  540.          PROCEDURE GotoPosition(pos:TEditorPos);
  541.          FUNCTION SetBookMark(i:BYTE; p:TEditorPos):BOOLEAN;
  542.          FUNCTION GetBookMark(i:BYTE;VAR p:TEditorPos):BOOLEAN;
  543.          FUNCTION GotoBookMark(i:BYTE):BOOLEAN;
  544.          FUNCTION ClearBookMark(i:BYTE):BOOLEAN;
  545.          FUNCTION ClearAllBookMarks:BOOLEAN;
  546.          FUNCTION GetChar(p:TEditorPos):CHAR;
  547.          FUNCTION GetWord(p:TEditorPos):STRING;
  548.          FUNCTION GetTextAfterWord(p:TEditorPos):STRING;
  549.          FUNCTION GetPartialText(y1,x1,y2,x2:LONGINT;VAR p:POINTER; VAR Len:LONGINT):BOOLEAN;
  550.          FUNCTION GetText(VAR p:POINTER; VAR Len:LONGINT; selected:BOOLEAN):BOOLEAN;
  551.          PROCEDURE SetText(p:POINTER; Len:LONGINT; select:BOOLEAN);
  552.          FUNCTION FindTextPos(find:STRING; direct:TFindDirection; origin:TFindOrigin;
  553.                                scope:TFindScope; opt:TFindOptions; VAR pt:TEditorPos):BOOLEAN;
  554.          FUNCTION FindText(CONST find:STRING; direct:TFindDirection; origin:TFindOrigin;
  555.                             scope:TFindScope; opt:TFindOptions):BOOLEAN;
  556.          FUNCTION ReplaceText(CONST find,replace:STRING; direct:TFindDirection;
  557.                                origin:TFindOrigin;scope:TFindScope;opt:TFindOptions;
  558.                                confirm:BOOLEAN;replaceall:BOOLEAN):BOOLEAN;
  559.          PROCEDURE Undo;
  560.          PROCEDURE Redo;
  561.          PROCEDURE ClearUndo;
  562.          PROCEDURE ClearRedo;
  563.          PROCEDURE CutToClipBoard;VIRTUAL;
  564.          PROCEDURE CopyToClipBoard;VIRTUAL;
  565.          FUNCTION PasteFromClipBoard:BOOLEAN;VIRTUAL;
  566.          FUNCTION InsertFromFile(s:STRING):BOOLEAN;VIRTUAL;
  567.          PROCEDURE SearchTextAgain;
  568.          PROCEDURE FindTextDlg;
  569.          PROCEDURE ReplaceTextDlg;
  570.          PROPERTY FileName:STRING read FFileName write SetFileName;
  571.          PROPERTY CountLines:LONGINT read FCountLines;
  572.          PROPERTY Lines[Index:LONGINT]:STRING read _Get write _Set; default;
  573.          PROPERTY CursorPos:TEditorPos read FFileCursor write GotoPosition;
  574.          PROPERTY OffsetPos:TEditorPos read FScrCursor;
  575.          PROPERTY MaxUndoEvents:LONGINT read MaxUndo write _SetMaxUndo;
  576.          PROPERTY UndoCount:LONGINT read GetUndoCount;
  577.          PROPERTY RedoCount:LONGINT read GetRedoCount;
  578.          PROPERTY AutoSaveEvents:INTEGER read FSaveEvents write SetSaveEvents;
  579.          PROPERTY BottomScrollBar:TScrollBar read FBottomScrollBar write FBottomScrollBar;
  580.          PROPERTY RightScrollBar:TScrollBar read FRightScrollBar write FRightScrollBar;
  581.          PROPERTY Mask:STRING read FMask write FMask;
  582.          PROPERTY Selected:BOOLEAN read _ICBExist;
  583.          PROPERTY Columns:LONGINT read FWinSize.X;
  584.          PROPERTY Rows:LONGINT read FWinSize.Y;
  585.          PROPERTY ColorEntry[ColorIndex:INTEGER]:TColor read GetColorEntry write SetColorEntry;
  586.          PROPERTY CursorShape:TCursorShape read FCursorShape write SetCursorShape;
  587.          PROPERTY SelectMode:TSelectMode read FSelectMode write SetSelectMode;
  588.          PROPERTY WordWrap:BOOLEAN read FWordWrap write SetWordWrap;
  589.          PROPERTY WordWrapColumn:INTEGER read FWordWrapColumn write SetWordWrapColumn;
  590.          PROPERTY InsertMode:BOOLEAN read FInsertMode write SetInsertMode;
  591.          PROPERTY Modified:BOOLEAN read FModified write SetModified;
  592.          PROPERTY Untitled:BOOLEAN read FUntitled write FUntitled;
  593.          PROPERTY ReadOnly:BOOLEAN read GetReadOnly write SetReadOnly;
  594.       PUBLISHED
  595.          PROPERTY KeystrokeMap:TKeystrokeMap read FKeyMap write SetKeyMap;
  596.          PROPERTY EditOptions:TEditOpt read FEditOpt write SetEditOpt;
  597.          PROPERTY TabSize:INTEGER read FTabSize write SetTabSize;
  598.          PROPERTY Ctl3D:BOOLEAN read FCtl3D write SetCtl3D;
  599.     END;
  600.  
  601.     TEditorClass=CLASS OF TEditor;
  602.  
  603.  
  604.  
  605. FUNCTION CheckWordsOnly(pl:PLine; VAR i:INTEGER; CONST s:STRING):BOOLEAN;
  606. FUNCTION GetDefaultExt(Mask:STRING):STRING;
  607. FUNCTION EditorPos(Line:LONGINT;Column:INTEGER):TEditorPos;
  608.  
  609.  
  610. IMPLEMENTATION
  611.  
  612.