IDE, SynEdit: add option to have bookmarks restore the scroll pos. Issue #40912

This commit is contained in:
Martin 2024-09-24 22:35:09 +02:00
parent 4696c84166
commit 77c4b7ceae
12 changed files with 233 additions and 27 deletions

View File

@ -132,7 +132,8 @@ type
procedure CopyToClipboard; virtual; abstract;
procedure CutToClipboard; virtual; abstract;
function GetBookMark(BookMark: Integer; out X, Y: Integer): Boolean; virtual; abstract;
procedure SetBookMark(BookMark: Integer; X, Y: Integer); virtual; abstract;
function GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean; virtual; abstract;
procedure SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1); virtual; abstract;
// screen and text position mapping
function LineCount: Integer; virtual; abstract;

View File

@ -983,9 +983,10 @@ type
// BoorMark
procedure ClearBookMark(BookMark: Integer);
function GetBookMark(BookMark: integer; var X, Y: integer): boolean;
function GetBookMark(BookMark: integer; var X, Y, ALeft, ATop: integer): boolean;
procedure GotoBookMark(BookMark: Integer);
function IsBookmark(BookMark: integer): boolean;
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
procedure SetBookMark(BookMark: Integer; X: Integer; Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1);
property Marks: TSynEditMarkList read fMarkList;
// Undo/Redo
@ -6451,11 +6452,19 @@ end;
procedure TCustomSynEdit.GotoBookMark(BookMark: Integer);
var
LogCaret: TPoint;
m: TSynEditBookMark;
begin
if (BookMark in [0..9]) and assigned(fBookMarks[BookMark])
and (fBookMarks[BookMark].Line <= fLines.Count)
then begin
LogCaret:=Point(fBookMarks[BookMark].Column, fBookMarks[BookMark].Line);
m := TSynEditBookMark(fBookMarks[BookMark]);
if (eoBookmarkRestoresScroll in FOptions2) and (m.TopLeftMark <> nil) and
(m.TopLeftMark.Line > 0)
then begin
TopLine := m.TopLeftMark.Line;
LeftChar := m.TopLeftMark.Column;
end;
LogCaret:=Point(m.Column, m.Line);
DoIncPaintLock(Self); // No editing is taking place
FCaret.ChangeOnTouch;
FCaret.LineBytePos := LogCaret;
@ -6470,14 +6479,15 @@ begin
FOnMouseLink(Self, X1, Y, Result);
end;
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer);
procedure TCustomSynEdit.SetBookMark(BookMark: Integer; X: Integer; Y: Integer; AnLeft: Integer;
AnTop: Integer);
var
i: Integer;
mark: TSynEditMark;
mark: TSynEditBookMark;
begin
if (BookMark in [0..9]) and (Y >= 1) and (Y <= Max(1, fLines.Count)) then
begin
mark := TSynEditMark.Create(self);
mark := TSynEditBookMark.Create(self);
X := PhysicalToLogicalPos(Point(X, Y)).x;
with mark do begin
Line := Y;
@ -6486,6 +6496,8 @@ begin
BookmarkNumber := Bookmark;
Visible := true;
InternalImage := (BookMarkOptions.BookmarkImages = nil);
if AnLeft > 0 then
mark.SetTopLeft(AnTop, AnLeft);
end;
for i := 0 to 9 do
if assigned(fBookMarks[i]) and (fBookMarks[i].Line = Y) then
@ -7448,9 +7460,10 @@ begin
or (fBookMarks[CX].Line <> CaretY);
ClearBookMark(CX);
if moveBkm then
SetBookMark(CX, CaretX, CaretY);
SetBookMark(CX, CaretX, CaretY, LeftChar, TopLine);
end else
SetBookMark(CX, CaretX, CaretY);
//SetBookMark(CX, CaretX, CaretY);
SetBookMark(CX, CaretX, CaretY, LeftChar, TopLine);
end; // if BookMarkOptions.EnableKeys
end;
ecCut:
@ -8054,6 +8067,28 @@ begin
end;
end;
function TCustomSynEdit.GetBookMark(BookMark: integer; var X, Y, ALeft, ATop: integer): boolean;
var
i: integer;
m: TSynEditMark;
begin
Result := false;
if assigned(Marks) then
for i := 0 to Marks.Count - 1 do
if Marks[i].IsBookmark and (Marks[i].BookmarkNumber = BookMark) then begin
m := Marks[i];
X := m.Column;
Y := m.Line;
X := LogicalToPhysicalPos(Point(X, Y)).x;
if (m is TSynEditBookMark) and (TSynEditBookMark(m).TopLeftMark <> nil) then begin
ALeft := TSynEditBookMark(m).TopLeftMark.Column;
ATop := TSynEditBookMark(m).TopLeftMark.Line;
end;
Result := true;
Exit;
end;
end;
function TCustomSynEdit.IsBookmark(BookMark: integer): boolean;
var
x, y: integer;

View File

@ -57,8 +57,9 @@ type
FOldLine: integer;
FOwnerEdit: TSynEditBase;
function GetLine: integer;
procedure SetBookmarkNum(AValue: integer);
procedure SetMarkLine(const AValue: TSynEditMarkLine);
procedure SetMarkList(const AValue: TSynEditMarkList);
procedure SetMarkList(const AValue: TSynEditMarkList); virtual;
procedure SetOwnerEdit(const AValue: TSynEditBase);
protected
FColumn, FImage, FPriority: Integer;
@ -73,7 +74,7 @@ type
procedure SetPriority(const AValue: integer); virtual;
procedure SetVisible(const Value: boolean); virtual;
procedure SetInternalImage(const Value: boolean);
function GetIsBookmark: boolean;
function GetIsBookmark: boolean; virtual;
procedure DoChange(AChanges: TSynEditMarkChangeReasons); virtual;
procedure ForceChange(AChanges: TSynEditMarkChangeReasons);
@ -94,7 +95,7 @@ type
property Priority: integer read FPriority write SetPriority;
property Visible: boolean read FVisible write SetVisible;
property BookmarkNumber: integer read FBookmarkNum write fBookmarkNum;
property BookmarkNumber: integer read FBookmarkNum write SetBookmarkNum;
property IsBookmark: boolean read GetIsBookmark;
// InternalImage: Use Internal bookmark image 0..9;
@ -107,6 +108,31 @@ type
property ImageList: TCustomImageList read FImageList write FImageList;
end;
{ TSynEditBookMark }
TSynEditBookMark = class(TSynEditMark)
private type
{ TSynEditTopLeftMark }
TSynEditTopLeftMark = class(TSynEditMark)
private
FBookMark: TSynEditBookMark;
public
destructor Destroy; override;
end;
private
FTopLeftMark: TSynEditMark;
procedure SetMarkList(const AValue: TSynEditMarkList); override;
protected
function GetIsBookmark: boolean; override;
public
destructor Destroy; override;
procedure SetTopLeft(ATop, ALeft: integer);
property TopLeftMark: TSynEditMark read FTopLeftMark;
end;
{ TSynEditMarkLine }
TSynEditMarkLine = class(TSynSizedDifferentialAVLNode)
@ -349,6 +375,12 @@ begin
Result := FLine;
end;
procedure TSynEditMark.SetBookmarkNum(AValue: integer);
begin
assert(Self is TSynEditBookMark, 'TSynEditMark.SetBookmarkNum: Self is TSynEditBookMark');
FBookmarkNum := AValue;
end;
procedure TSynEditMark.SetMarkLine(const AValue: TSynEditMarkLine);
begin
if FMarkLine = AValue then exit;
@ -360,7 +392,7 @@ end;
function TSynEditMark.GetIsBookmark: boolean;
begin
Result := (fBookmarkNum >= 0);
Result := False;
end;
procedure TSynEditMark.DoChange(AChanges: TSynEditMarkChangeReasons);
@ -460,6 +492,51 @@ begin
DoChange(FChanges);
end;
{ TSynEditBookMark }
procedure TSynEditBookMark.SetMarkList(const AValue: TSynEditMarkList);
begin
inherited SetMarkList(AValue);
if (FMarkList <> nil) and (FTopLeftMark <> nil) then
FMarkList.Add(FTopLeftMark);
end;
function TSynEditBookMark.GetIsBookmark: boolean;
begin
Result := True;
end;
destructor TSynEditBookMark.Destroy;
begin
if FTopLeftMark <> nil then begin
TSynEditTopLeftMark(FTopLeftMark).FBookMark := nil;
FTopLeftMark.Free;
end;
inherited Destroy;
end;
procedure TSynEditBookMark.SetTopLeft(ATop, ALeft: integer);
begin
if (ATop <= 0) or (ALeft <= 0) then
exit;
FTopLeftMark := TSynEditTopLeftMark.Create(OwnerEdit);
TSynEditTopLeftMark(FTopLeftMark).FBookMark := Self;
FTopLeftMark.Line := ATop;
FTopLeftMark.Column := ALeft;
if (FMarkList <> nil) then
FMarkList.Add(FTopLeftMark);
end;
{ TSynEditBookMark.TSynEditTopLeftMark }
destructor TSynEditBookMark.TSynEditTopLeftMark.Destroy;
begin
if FBookMark <> nil then
FBookMark.FTopLeftMark := nil;
inherited Destroy;
end;
{ TSynEditMarkLine }
function TSynEditMarkLine.GetMark(Index: Integer): TSynEditMark;

View File

@ -196,8 +196,9 @@ type
eoScrollPastEolAddPage, // Allows caret to go into empty space beyond end-of-line position
// - Limit to length of longest line + width of one page
// if eoScrollPastEol also is set, the bigger of the 2 limits is used
eoScrollPastEolAutoCaret // Allows caret to go into empty space beyond end-of-line position
eoScrollPastEolAutoCaret, // Allows caret to go into empty space beyond end-of-line position
// Limit will follow the caret / scrollbar-range extends when caret goes further
eoBookmarkRestoresScroll // Bookmarks also restore scroll pos
);
TSynEditorOptions2 = set of TSynEditorOption2;

View File

@ -5636,7 +5636,8 @@ begin
SynEditOptName := 'OverwriteBlock';
eoAutoHideCursor:
SynEditOptName := 'AutoHideCursor';
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange:
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange,
eoBookmarkRestoresScroll:
WriteStr(SynEditOptName, SynEditOpt2);
else
SynEditOptName := '';
@ -5893,7 +5894,8 @@ begin
SynEditOptName := 'OverwriteBlock';
eoAutoHideCursor:
SynEditOptName := 'AutoHideCursor';
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange:
eoCaretMoveEndsSelection, eoPersistentCaretStopBlink, eoNoScrollOnSelectRange,
eoBookmarkRestoresScroll:
WriteStr(SynEditOptName, SynEditOpt2);
else
SynEditOptName := '';

View File

@ -47,8 +47,8 @@ object EditorGeneralMiscOptionsFrame: TEditorGeneralMiscOptionsFrame
ChildSizing.ControlsPerLine = 1
ColumnLayout = clVerticalThenHorizontal
Columns = 2
OnItemClick = EditorOptionsGroupBoxItemClick
TabOrder = 0
OnItemClick = EditorOptionsGroupBoxItemClick
end
object EditorTrimSpaceTypeComboBox: TComboBox
AnchorSideLeft.Control = Owner

View File

@ -122,9 +122,10 @@ begin
Items.Add(dlgCopyWordAtCursorOnCopyNone); // 3
Items.Add(dlgCopyPasteKeepFolds); // 4
Items.Add(dlgEditExportBackColor); // 5
Items.Add(dlgBookmarkSetScroll); // 6
{$IFDEF WinIME} // Keep last, or all subsequnt indexes will depend on it
Items.Add(dlgUseMinimumIme); // 6
Items.Add(dlgUseMinimumIme); // 7
{$ENDIF}
end;
EditorTrimSpaceTypeComboBox.Items.Add(dlgTrimSpaceTypeLeaveLine);
@ -160,8 +161,9 @@ begin
Checked[3] := CopyWordAtCursorOnCopyNone;
Checked[4] := eoFoldedCopyPaste in SynEditOptions2;
Checked[5] := ExportHtmlWithBackground;
Checked[6] := eoBookmarkRestoresScroll in SynEditOptions2;
{$IFDEF WinIME}
Checked[6] := UseMinimumIme;
Checked[7] := UseMinimumIme;
{$ENDIF}
with ScrollOnEditLeftOptions do begin
@ -212,8 +214,12 @@ begin
SynEditOptions2 := SynEditOptions2 - [eoFoldedCopyPaste];
TrimSpaceType := TSynEditStringTrimmingType(EditorTrimSpaceTypeComboBox.ItemIndex);
ExportHtmlWithBackground := EditorOptionsGroupBox.Checked[5];
if EditorOptionsGroupBox.Checked[6] then
SynEditOptions2 := SynEditOptions2 + [eoBookmarkRestoresScroll]
else
SynEditOptions2 := SynEditOptions2 - [eoBookmarkRestoresScroll];
{$IFDEF WinIME}
UseMinimumIme := EditorOptionsGroupBox.Checked[6];
UseMinimumIme := EditorOptionsGroupBox.Checked[7];
{$ENDIF}
with ScrollOnEditLeftOptions do begin

View File

@ -1833,6 +1833,7 @@ resourcestring
dlgCopyPasteKeepFolds = 'Copy/Paste with fold info';
dlgUseMinimumIme = 'IME handled by System';
dlgEditExportBackColor = 'Use Background color in HTML export';
dlgBookmarkSetScroll = 'Bookmarks restore scroll position';
dlgUndoLimit = 'Undo limit';
dlgTabWidths = 'Tab widths';
dlgMarginGutter = 'Margin and gutter';

View File

@ -11240,7 +11240,11 @@ var
UnitInfo: TUnitInfo;
begin
UnitInfo := Project1.UnitWithEditorComponent(TSourceEditor(Sender));
UnitInfo.AddBookmark(Mark.Column, Mark.Line, Mark.BookmarkNumber);
if (Mark is TSynEditBookMark) and (TSynEditBookMark(Mark).TopLeftMark <> nil) then
UnitInfo.AddBookmark(Mark.Column, Mark.Line,
TSynEditBookMark(Mark).Column, TSynEditBookMark(Mark).Line, Mark.BookmarkNumber)
else
UnitInfo.AddBookmark(Mark.Column, Mark.Line, Mark.BookmarkNumber);
end;
procedure TMainIDE.SrcNotebookEditorClearBookmark(Sender: TObject; var Mark: TSynEditMark);
@ -11315,7 +11319,7 @@ Begin
SetMark:=false;
end;
if SetMark then
ActEdit.EditorComponent.SetBookMark(ID,NewXY.X,NewXY.Y);
ActEdit.EditorComponent.SetBookMark(ID,NewXY.X,NewXY.Y, ActEdit.EditorComponent.LeftChar, ActEdit.EditorComponent.TopLine);
{$push}{$overflowchecks off}
Inc(BookmarksStamp);

View File

@ -432,6 +432,7 @@ type
procedure ClearUnitComponentDependencies(ClearTypes: TUnitCompDependencyTypes);
// Bookmarks
function AddBookmark(X, Y, ID: integer):integer;
function AddBookmark(X, Y, ALeft, ATop, ID: integer):integer;
procedure DeleteBookmark(ID: integer);
// EditorInfo
// At any time, any UnitInfo has at least one EditorInfo
@ -1112,6 +1113,7 @@ type
// bookmarks
function AddBookmark(X, Y, ID: Integer; AUnitInfo:TUnitInfo):integer;
function AddBookmark(X, Y, ALeft, ATop, ID: Integer; AUnitInfo:TUnitInfo):integer;
procedure DeleteBookmark(ID: Integer);
public
property ActiveBuildMode: TProjectBuildMode read FActiveBuildMode
@ -1837,7 +1839,7 @@ procedure TUnitInfo.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string;
SaveData, SaveSession: boolean; UsePathDelim: TPathDelimSwitch);
var
AFilename: String;
i, X, Y: Integer;
i, X, Y, L, T: Integer;
s: String;
BM: TFileBookmark;
begin
@ -1894,8 +1896,11 @@ begin
then
Bookmarks.Delete(i)
else
if OpenEditorInfo[0].EditorComponent.GetBookMark(BM.ID, X, Y) then
if OpenEditorInfo[0].EditorComponent.GetBookMark(BM.ID, X, Y, L, T) then begin
BM.CursorPos := Point(X, Y);
BM.Top := T;
BM.Left := L;
end;
end;
FBookmarks.SaveToXMLConfig(XMLConfig,Path+'Bookmarks/');
XMLConfig.SetDeleteValue(Path+'Loaded/Value',Loaded,false);
@ -2091,7 +2096,7 @@ begin
BM := Bookmarks[i];
j := Project1.Bookmarks.IndexOfID(BM.ID);
if (j < 0) then
OpenEditorInfo[0].EditorComponent.SetBookMark(BM.ID, BM.CursorPos.X, BM.CursorPos.Y);
OpenEditorInfo[0].EditorComponent.SetBookMark(BM.ID, BM.CursorPos.X, BM.CursorPos.Y, BM.Left, BM.Top);
end;
finally
dec(FSetBookmarLock);
@ -2435,6 +2440,16 @@ begin
Project1.AddBookmark(X, Y, ID, Self);
end;
function TUnitInfo.AddBookmark(X, Y, ALeft, ATop, ID: integer): integer;
begin
if FSetBookmarLock = 0 then
Result := Bookmarks.Add(X, Y, ALeft, ATop, ID)
else
Result := -1;
SessionModified := True;
Project1.AddBookmark(X, Y, ALeft, ATop, ID, Self);
end;
procedure TUnitInfo.DeleteBookmark(ID: integer);
var
i: Integer;
@ -5542,6 +5557,12 @@ begin
SessionModified := true;
end;
function TProject.AddBookmark(X, Y, ALeft, ATop, ID: Integer; AUnitInfo: TUnitInfo): integer;
begin
Result := Bookmarks.Add(X, Y, ALeft, ATop, ID, AUnitInfo);
SessionModified := true;
end;
procedure TProject.DeleteBookmark(ID: Integer);
var
i: Integer;

View File

@ -132,22 +132,32 @@ var
type
//---------------------------------------------------------------------------
// bookmarks of a single file
{ TFileBookmark }
TFileBookmark = class
private
fCursorPos: TPoint;
fID: integer;
FLeft: integer;
FTop: integer;
public
constructor Create;
constructor Create(NewX,NewY,AnID: integer);
constructor Create(NewX,NewY,NewLeft,NewTop,AnID: integer);
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
function X: integer;
function Y: integer;
property Top: integer read FTop write FTop;
property Left: integer read FLeft write FLeft;
public
property CursorPos: TPoint read fCursorPos write fCursorPos;
property ID: integer read fID write fID;
end;
{ TFileBookmarks }
TFileBookmarks = class
private
FBookmarks:TList; // list of TFileBookmark
@ -163,6 +173,7 @@ type
procedure Clear;
function Add(ABookmark: TFileBookmark):integer;
function Add(X,Y,ID: integer):integer;
function Add(X,Y,ALeft,ATop,ID: integer):integer;
function IndexOfID(ID:integer):integer;
procedure SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string);
procedure LoadFromXMLConfig(XMLConfig: TXMLConfig; const Path: string);
@ -176,11 +187,16 @@ type
TProjectBookmark = class
private
fCursorPos: TPoint;
FLeft: integer;
FTop: integer;
FUnitInfo: TObject;
fID: integer;
public
constructor Create(X,Y, AnID: integer; AUnitInfo:TObject);
constructor Create(X,Y, ALeft, ATop, AnID: integer; AUnitInfo:TObject);
property CursorPos: TPoint read fCursorPos write fCursorPos;
property Top: integer read FTop;
property Left: integer read FLeft;
property UnitInfo: TObject read FUnitInfo write FUnitInfo;
property ID:integer read fID write fID;
end;
@ -202,6 +218,7 @@ type
procedure Clear;
function Add(ABookmark: TProjectBookmark):integer;
function Add(X, Y, ID: integer; AUnitInfo: TObject):integer;
function Add(X, Y, ALeft, ATop, ID: integer; AUnitInfo: TObject):integer;
procedure DeleteAllWithUnitInfo(AUnitInfo:TObject);
function IndexOfID(ID:integer):integer;
function BookmarkWithID(ID: integer): TProjectBookmark;
@ -300,10 +317,19 @@ begin
inherited Create;
fCursorPos.X := X;
fCursorPos.Y := Y;
FLeft := -1;
FTop := -1;
FUnitInfo := AUnitInfo;
fID := AnID;
end;
constructor TProjectBookmark.Create(X, Y, ALeft, ATop, AnID: integer; AUnitInfo: TObject);
begin
Create(X, Y, AnID, AUnitInfo);
FLeft := ALeft;
FTop := ATop;
end;
{ TProjectBookmarkList }
constructor TProjectBookmarkList.Create;
@ -401,6 +427,11 @@ begin
Result:=Add(TProjectBookmark.Create(X, Y, ID, AUnitInfo));
end;
function TProjectBookmarkList.Add(X, Y, ALeft, ATop, ID: integer; AUnitInfo: TObject): integer;
begin
Result:=Add(TProjectBookmark.Create(X, Y, ALeft, ATop, ID, AUnitInfo));
end;
{ TProjectJumpHistoryPosition }
constructor TProjectJumpHistoryPosition.Create(const AFilename: string;
@ -764,14 +795,25 @@ constructor TFileBookmark.Create(NewX, NewY, AnID: integer);
begin
fCursorPos.X:=NewX;
fCursorPos.Y:=NewY;
FLeft := -1;
FTop := -1;
fID:=AnID;
end;
constructor TFileBookmark.Create(NewX, NewY, NewLeft, NewTop, AnID: integer);
begin
Create(NewX, NewY, AnID);
FLeft := NewLeft;
FTop := NewTop;
end;
procedure TFileBookmark.SaveToXMLConfig(XMLConfig: TXMLConfig;
const Path: string);
begin
XMLConfig.SetDeleteValue(Path+'X',fCursorPos.X,1);
XMLConfig.SetDeleteValue(Path+'Y',fCursorPos.Y,1);
XMLConfig.SetDeleteValue(Path+'Left',FLeft,-1);
XMLConfig.SetDeleteValue(Path+'Top',FTop,-1);
XMLConfig.SetDeleteValue(Path+'ID',fID,0);
end;
@ -780,6 +822,8 @@ procedure TFileBookmark.LoadFromXMLConfig(XMLConfig: TXMLConfig;
begin
fCursorPos.X:=XMLConfig.GetValue(Path+'X',1);
fCursorPos.Y:=XMLConfig.GetValue(Path+'Y',1);
FLeft:=XMLConfig.GetValue(Path+'Left',-1);
FTop :=XMLConfig.GetValue(Path+'Top',-1);
fID:=XMLConfig.GetValue(Path+'ID',0);
end;
@ -851,6 +895,11 @@ begin
Result:=Add(TFileBookmark.Create(X,Y,ID));
end;
function TFileBookmarks.Add(X, Y, ALeft, ATop, ID: integer): integer;
begin
Result:=Add(TFileBookmark.Create(X,Y,ALeft,ATop,ID));
end;
function TFileBookmarks.IndexOfID(ID: integer): integer;
begin
Result:=Count-1;

View File

@ -460,7 +460,8 @@ type
procedure CopyToClipboard; override;
procedure CutToClipboard; override;
function GetBookMark(BookMark: Integer; out X, Y: Integer): Boolean; override;
procedure SetBookMark(BookMark: Integer; X, Y: Integer); override;
function GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean; override;
procedure SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer = -1; AnTop: Integer = -1); override;
procedure ExportAsHtml(AFileName: String);
@ -4947,9 +4948,17 @@ begin
Result := FEditor.GetBookMark(BookMark, X, Y);
end;
procedure TSourceEditor.SetBookMark(BookMark: Integer; X, Y: Integer);
function TSourceEditor.GetBookMark(BookMark: Integer; out X, Y, ALeft, ATop: Integer): Boolean;
begin
FEditor.SetBookMark(BookMark, X, Y);
X := 0; Y := 0;
ALeft := -1; ATop := -1;
Result := FEditor.GetBookMark(BookMark, X, Y, ALeft, ATop);
end;
procedure TSourceEditor.SetBookMark(BookMark: Integer; X, Y: Integer; AnLeft: Integer;
AnTop: Integer);
begin
FEditor.SetBookMark(BookMark, X, Y, AnLeft, AnTop);
end;
procedure TSourceEditor.ExportAsHtml(AFileName: String);