From 29b5dce82ad544f25faac06bb8e295b3c7a026bc Mon Sep 17 00:00:00 2001 From: martin Date: Sat, 20 Jun 2009 20:25:21 +0000 Subject: [PATCH] SynEdit, removed a circular unit ref git-svn-id: trunk@20684 - --- components/synedit/synedit.pp | 3 +- components/synedit/syneditmarkup.pp | 59 +++++++++++-------- components/synedit/syneditmarkupbracket.pp | 15 ++--- .../synedit/syneditmarkupctrlmouselink.pp | 6 +- components/synedit/syneditmarkuphighall.pp | 49 +++++++-------- components/synedit/syneditmarkupselection.pp | 4 +- .../synedit/syneditmarkupspecialline.pp | 14 ++--- components/synedit/syneditmarkupwordgroup.pp | 30 +++++----- 8 files changed, 90 insertions(+), 90 deletions(-) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index c4aaef0588..0a1e97d1ca 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -1578,6 +1578,7 @@ begin fMarkupManager.AddMarkUp(fMarkupWordGroup); fMarkupManager.AddMarkUp(fMarkupSelection); fMarkupManager.Lines := FTheLinesView; + fMarkupManager.Caret := FCaret; fMarkupManager.InvalidateLinesMethod := @InvalidateLines; Color := clWhite; @@ -3819,7 +3820,6 @@ begin InvalidateGutterLines(FCaret.LinePos, FCaret.LinePos); end; EnsureCursorPosVisible; - FMarkupManager.Caret := FCaret.LineCharPos; if fPaintLock = 0 then fMarkupHighCaret.CheckState; // Todo need a global lock, including the markup end; @@ -3903,7 +3903,6 @@ Begin // Force caret reset CaretXY := CaretXY; EnsureCursorPosVisible; - fMarkupManager.Caret := CaretXY; finally if not AddToUndoList then begin fUndoList.Unlock; diff --git a/components/synedit/syneditmarkup.pp b/components/synedit/syneditmarkup.pp index 54b2dcadcc..7f3d0bd6c8 100644 --- a/components/synedit/syneditmarkup.pp +++ b/components/synedit/syneditmarkup.pp @@ -26,7 +26,7 @@ unit SynEditMarkup; interface uses - Classes, SysUtils, Graphics, SynEditTextBase, + Classes, SysUtils, Graphics, SynEditTextBase, SynEditPointClasses, SynEditMiscClasses, SynEditMiscProcs, Controls, SynEditHighlighter; type @@ -40,12 +40,12 @@ type TSynEditMarkup = class(TObject) private - fMarkupInfo : TSynSelectedColor; - fLines : TSynEditStrings; - fCaret : TPoint; - fTopLine, FLinesInWindow : Integer; - fSynEdit : TCustomControl; - fInvalidateLinesMethod : TInvalidateLines; + FMarkupInfo : TSynSelectedColor; + FLines : TSynEditStrings; + FCaret : TSynEditCaret; + FTopLine, FLinesInWindow : Integer; + FSynEdit : TSynEditBase; + FInvalidateLinesMethod : TInvalidateLines; FEnabled: Boolean; FTempEnable: Integer; @@ -66,9 +66,9 @@ type procedure SetLines(const AValue : TSynEditStrings); virtual; procedure SetTopLine(const AValue : Integer); virtual; procedure SetLinesInWindow(const AValue : Integer); virtual; - procedure SetCaret(const AValue : TPoint); virtual; + procedure SetCaret(const AValue : TSynEditCaret); virtual; - procedure DoCaretChanged(OldCaret : TPoint); virtual; + procedure DoCaretChanged(Sender: TObject); virtual; procedure DoTopLineChanged(OldTopLine : Integer); virtual; procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); virtual; procedure DoTextChanged(StartLine, EndLine : Integer); virtual; @@ -80,9 +80,9 @@ type function LogicalToPhysicalPos(const p: TPoint): TPoint; function Highlighter: TSynCustomHighlighter; - property SynEdit : TCustomControl read fSynEdit; + property SynEdit : TSynEditBase read fSynEdit; public - constructor Create(ASynEdit : TCustomControl); + constructor Create(ASynEdit : TSynEditBase); destructor Destroy; override; Procedure PrepareMarkupForRow(aRow : Integer); virtual; Procedure FinishMarkupForRow(aRow : Integer); virtual; @@ -102,7 +102,7 @@ type property Style : TFontStyles read GetStyle; property Enabled: Boolean read GetEnabled write SetEnabled; property Lines : TSynEditStrings read fLines write SetLines; - property Caret : TPoint read fCaret write SetCaret; + property Caret : TSynEditCaret read fCaret write SetCaret; property TopLine : Integer read fTopLine write SetTopLine; property LinesInWindow : Integer read fLinesInWindow write SetLinesInWindow; property InvalidateLinesMethod : TInvalidateLines write SetInvalidateLinesMethod; @@ -121,9 +121,9 @@ type procedure SetLines(const AValue : TSynEditStrings); override; procedure SetTopLine(const AValue : Integer); override; procedure SetLinesInWindow(const AValue : Integer); override; - procedure SetCaret(const AValue : TPoint); override; + procedure SetCaret(const AValue : TSynEditCaret); override; public - constructor Create(ASynEdit : TCustomControl); + constructor Create(ASynEdit : TSynEditBase); destructor Destroy; override; Procedure AddMarkUp(aMarkUp : TSynEditMarkup); @@ -223,14 +223,17 @@ begin fInvalidateLinesMethod := AValue; end; -procedure TSynEditMarkup.SetCaret(const AValue : TPoint); +procedure TSynEditMarkup.SetCaret(const AValue : TSynEditCaret); var - OldValue : TPoint; + r: Boolean; begin - if (fCaret.x = AValue.X) and (fCaret.Y = AValue.Y) then exit; - OldValue := fCaret; - fCaret := AValue; - DoCaretChanged(OldValue); + // inly register caret change callback, if handler is overriden + r := TMethod(@Self.DoCaretChanged).Code <> Pointer(@TSynEditMarkup.DoCaretChanged); + if r and (FCaret <> nil) then + FCaret.RemoveChangeHandler(@DoCaretChanged); + FCaret := AValue; + if r and (FCaret <> nil) then + FCaret.AddChangeHandler(@DoCaretChanged); end; procedure TSynEditMarkup.SetTopLine(const AValue : Integer); @@ -253,7 +256,7 @@ begin DoLinesInWindoChanged(OldValue); end; -procedure TSynEditMarkup.DoCaretChanged(OldCaret : TPoint); +procedure TSynEditMarkup.DoCaretChanged(Sender: TObject); begin end; @@ -291,7 +294,7 @@ end; function TSynEditMarkup.LogicalToPhysicalPos(const p : TPoint) : TPoint; begin - Result := TSynEdit(SynEdit).LogicalToPhysicalPos(p); + Result := FLines.LogicalToPhysicalPos(p); end; function TSynEditMarkup.Highlighter : TSynCustomHighlighter; @@ -299,7 +302,7 @@ begin Result := TSynEdit(SynEdit).Highlighter; end; -constructor TSynEditMarkup.Create(ASynEdit : TCustomControl); +constructor TSynEditMarkup.Create(ASynEdit : TSynEditBase); begin inherited Create(); fSynEdit := ASynEdit; @@ -345,7 +348,7 @@ end; { TSynEditMarkupManager } -constructor TSynEditMarkupManager.Create(ASynEdit : TCustomControl); +constructor TSynEditMarkupManager.Create(ASynEdit : TSynEditBase); begin inherited Create(ASynEdit); fMarkUpList := TList.Create; @@ -364,7 +367,11 @@ end; procedure TSynEditMarkupManager.AddMarkUp(aMarkUp : TSynEditMarkup); begin fMarkUpList.Add(aMarkUp); - aMarkUp.Lines := Lines;; + aMarkUp.Lines := Lines; + aMarkUp.Caret := Caret; + aMarkUp.TopLine := TopLine; + aMarkUp.LinesInWindow := LinesInWindow; + aMarkUp.InvalidateLinesMethod := FInvalidateLinesMethod; end; function TSynEditMarkupManager.Count: Integer; @@ -509,7 +516,7 @@ begin TSynEditMarkup(fMarkUpList[i]).SetLinesInWindow(AValue); end; -procedure TSynEditMarkupManager.SetCaret(const AValue : TPoint); +procedure TSynEditMarkupManager.SetCaret(const AValue : TSynEditCaret); var i : integer; begin diff --git a/components/synedit/syneditmarkupbracket.pp b/components/synedit/syneditmarkupbracket.pp index 6ff9b30530..3af3206028 100644 --- a/components/synedit/syneditmarkupbracket.pp +++ b/components/synedit/syneditmarkupbracket.pp @@ -46,13 +46,13 @@ type protected procedure FindMatchingBracketPair(PhysCaret: TPoint; var StartBracket, EndBracket: TPoint); - procedure DoCaretChanged(OldCaret : TPoint); override; + procedure DoCaretChanged(Sender: TObject); override; procedure DoTopLineChanged(OldTopLine : Integer); override; procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override; procedure DoTextChanged(StartLine, EndLine : Integer); override; procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override; public - constructor Create(ASynEdit: TCustomControl); + constructor Create(ASynEdit: TSynEditBase); function GetMarkupAttributeAtRowCol(const aRow, aCol: Integer): TSynSelectedColor; override; function GetNextMarkupColAfterRowCol(const aRow, aCol: Integer): Integer; override; @@ -67,7 +67,7 @@ uses { TSynEditMarkupBracket } -constructor TSynEditMarkupBracket.Create(ASynEdit : TCustomControl); +constructor TSynEditMarkupBracket.Create(ASynEdit : TSynEditBase); begin inherited Create(ASynEdit); FBracketHighlightPos.Y := -1; @@ -110,7 +110,7 @@ begin begin // need to dec PhysCaret, in case we are in the middle of a tab dec(PhysCaret.x); - LogCaretXY := TSynEdit(SynEdit).PhysicalToLogicalPos(PhysCaret); + LogCaretXY := Lines.PhysicalToLogicalPos(PhysCaret); x := LogCaretXY.x; if (x <= length(StartLine)) and (StartLine[x] in Brackets) then begin @@ -124,7 +124,7 @@ begin if (HighlightStyle in [sbhsRightOfCursor, sbhsBoth]) then begin - LogCaretXY := TSynEdit(SynEdit).PhysicalToLogicalPos(PhysCaret); + LogCaretXY := Lines.PhysicalToLogicalPos(PhysCaret); x := LogCaretXY.x; if (x <= length(StartLine)) and (StartLine[x] in Brackets) then begin @@ -134,7 +134,7 @@ begin end; end; -procedure TSynEditMarkupBracket.DoCaretChanged(OldCaret: TPoint); +procedure TSynEditMarkupBracket.DoCaretChanged(Sender: TObject); begin InvalidateBracketHighlight; end; @@ -163,10 +163,11 @@ procedure TSynEditMarkupBracket.InvalidateBracketHighlight; var NewPos, NewAntiPos, SwapPos : TPoint; begin + if Caret = nil then exit; NewPos.Y:=-1; NewAntiPos.Y:=-1; if eoBracketHighlight in TSynEdit(SynEdit).Options - then FindMatchingBracketPair(TSynEdit(SynEdit).CaretXY, NewPos, NewAntiPos); + then FindMatchingBracketPair(Caret.LineCharPos, NewPos, NewAntiPos); // Always keep ordered if (NewAntiPos.Y > 0) diff --git a/components/synedit/syneditmarkupctrlmouselink.pp b/components/synedit/syneditmarkupctrlmouselink.pp index e121b30fca..38c1e3a9a6 100644 --- a/components/synedit/syneditmarkupctrlmouselink.pp +++ b/components/synedit/syneditmarkupctrlmouselink.pp @@ -54,7 +54,7 @@ type procedure UpdateCtrlMouse; property LastMouseCaret: TPoint read FLastMouseCaret write SetLastMouseCaret; public - constructor Create(ASynEdit: TCustomControl); + constructor Create(ASynEdit: TSynEditBase); destructor Destroy; override; Procedure EndMarkup; override; @@ -117,7 +117,7 @@ begin if FLastControlIsPressed and (LastMouseCaret.X>0) and (LastMouseCaret.Y>0) then begin // show link NewY := LastMouseCaret.Y; - TSynEdit(SynEdit).GetWordBoundsAtRowCol(TSynEdit(SynEdit).PhysicalToLogicalPos(LastMouseCaret),NewX1,NewX2); + TSynEdit(SynEdit).GetWordBoundsAtRowCol(Lines.PhysicalToLogicalPos(LastMouseCaret),NewX1,NewX2); if (NewY = CtrlMouseLine) and (NewX1 = CtrlMouseX1) and (NewX2 = CtrlMouseX2) @@ -150,7 +150,7 @@ begin end; end; -constructor TSynEditMarkupCtrlMouseLink.Create(ASynEdit: TCustomControl); +constructor TSynEditMarkupCtrlMouseLink.Create(ASynEdit: TSynEditBase); begin inherited Create(ASynEdit); FLastControlIsPressed := false; diff --git a/components/synedit/syneditmarkuphighall.pp b/components/synedit/syneditmarkuphighall.pp index a0692e7226..9cf6221dce 100644 --- a/components/synedit/syneditmarkuphighall.pp +++ b/components/synedit/syneditmarkuphighall.pp @@ -116,7 +116,7 @@ type property HideSingleMatch: Boolean read FHideSingleMatch write FHideSingleMatch; property MatchCount: Integer read GetMatchCount; public - constructor Create(ASynEdit : TCustomControl); + constructor Create(ASynEdit : TSynEditBase); destructor Destroy; override; Function GetMarkupAttributeAtRowCol(const aRow, aCol : Integer) : TSynSelectedColor; override; @@ -152,11 +152,10 @@ type procedure SetSelection(const AValue: TSynEditSelection); procedure SetTrim(const AValue: Boolean); procedure SetWaitTime(const AValue: Integer); - function LogicalCaret: TPoint; protected procedure SetSearchString(const AValue : String); override; procedure SelectionChanged(Sender: TObject); - procedure DoCaretChanged(OldCaret : TPoint); override; + procedure DoCaretChanged(Sender: TObject); override; procedure DoTextChanged(StartLine, EndLine : Integer); override; procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override; procedure RestartTimer; @@ -164,7 +163,7 @@ type function GetCurrentText: String; function GetCurrentOption: TSynSearchOptions; public - constructor Create(ASynEdit : TCustomControl); + constructor Create(ASynEdit : TSynEditBase); destructor Destroy; override; procedure CheckState; // Todo need a global lock, including the markup procedure ToggleCurrentWord; @@ -310,7 +309,7 @@ end; { TSynEditMarkupHighlightAll } -constructor TSynEditMarkupHighlightAll.Create(ASynEdit : TCustomControl); +constructor TSynEditMarkupHighlightAll.Create(ASynEdit : TSynEditBase); begin inherited Create(ASynEdit); fSearch := TSynEditSearch.Create; @@ -417,7 +416,7 @@ begin Pos := 0; FindInitialize(false); - ptEnd.Y:= min(TCustomSynEdit(SynEdit).ScreenRowToRow(LinesInWindow)+100, Lines.Count); + ptEnd.Y:= min(ScreenRowToRow(LinesInWindow)+100, Lines.Count); ptEnd.X:= Length(Lines[ptEnd.y - 1]); While (true) do begin @@ -544,12 +543,6 @@ begin RestartTimer; end; -function TSynEditMarkupHighlightAllCaret.LogicalCaret: TPoint; -begin - Result := TCustomSynEdit(SynEdit).PhysicalToLogicalPos - (TCustomSynEdit(SynEdit).CaretXY); -end; - procedure TSynEditMarkupHighlightAllCaret.SetSearchString(const AValue: String); begin inherited SetSearchString(AValue); @@ -607,7 +600,7 @@ procedure TSynEditMarkupHighlightAllCaret.CheckState; var t: String; begin - if not FStateChanged then + if (not FStateChanged) or (Caret = nil) then exit; FStateChanged := False; t := GetCurrentText; @@ -617,9 +610,9 @@ begin end; if (SearchString <> '') and ( ((CompareCarets(FLowBound, FOldLowBound) = 0) and - (CompareCarets(LogicalCaret, FUpBound) >= 0) and (MatchCount > 1) ) + (CompareCarets(Caret.LineBytePos, FUpBound) >= 0) and (MatchCount > 1) ) OR ((CompareCarets(FUpBound, FOldUpBound) = 0) and - (CompareCarets(LogicalCaret, FLowBound) <= 0) and (MatchCount > 1) ) + (CompareCarets(Caret.LineBytePos, FLowBound) <= 0) and (MatchCount > 1) ) ) then begin ScrollTimerHandler(self); exit; @@ -635,7 +628,7 @@ begin inherited; end; -procedure TSynEditMarkupHighlightAllCaret.DoCaretChanged(OldCaret: TPoint); +procedure TSynEditMarkupHighlightAllCaret.DoCaretChanged(Sender: TObject); begin FStateChanged := True; // Something changed, paint will be called inherited; @@ -683,24 +676,26 @@ function TSynEditMarkupHighlightAllCaret.GetCurrentText: String; Result := copy(Result, 1, i); end; begin + if Caret = nil then + exit(''); if FToggledWord <> '' then exit(FToggledWord); - If TCustomSynEdit(SynEdit).SelAvail then begin + If TSynEdit(SynEdit).SelAvail then begin if FTrim then - Result := TrimS(TCustomSynEdit(SynEdit).SelText) + Result := TrimS(TSynEdit(SynEdit).SelText) else - Result := TCustomSynEdit(SynEdit).SelText; + Result := TSynEdit(SynEdit).SelText; if TrimS(Result) = '' then Result := ''; - FLowBound := TCustomSynEdit(SynEdit).BlockBegin; - FUpBound := TCustomSynEdit(SynEdit).BlockEnd; + FLowBound := TSynEdit(SynEdit).BlockBegin; + FUpBound := TSynEdit(SynEdit).BlockEnd; end else begin - Result := TCustomSynEdit(SynEdit).GetWordAtRowCol(LogicalCaret); + Result := TSynEdit(SynEdit).GetWordAtRowCol(Caret.LineBytePos); if FIgnoreKeywords and assigned(FHighlighter) and FHighlighter.IsKeyword(Result) then Result := ''; - FLowBound.Y := LogicalCaret.Y; - FUpBound.Y := LogicalCaret.Y; - TCustomSynEdit(SynEdit).GetWordBoundsAtRowCol(LogicalCaret, FLowBound.X, FUpBound.X); + FLowBound.Y := Caret.LinePos; + FUpBound.Y := Caret.LinePos; + TSynEdit(SynEdit).GetWordBoundsAtRowCol(Caret.LineBytePos, FLowBound.X, FUpBound.X); end; end; @@ -708,7 +703,7 @@ function TSynEditMarkupHighlightAllCaret.GetCurrentOption: TSynSearchOptions; begin if FToggledWord <> '' then exit(FToggledOption); - If TCustomSynEdit(SynEdit).SelAvail or not(FFullWord) then + If TSynEdit(SynEdit).SelAvail or not(FFullWord) then Result := [] else if (FFullWordMaxLen >0) and (UTF8Length(GetCurrentText) > FFullWordMaxLen) then @@ -717,7 +712,7 @@ begin Result := [ssoWholeWord]; end; -constructor TSynEditMarkupHighlightAllCaret.Create(ASynEdit: TCustomControl); +constructor TSynEditMarkupHighlightAllCaret.Create(ASynEdit: TSynEditBase); begin inherited Create(ASynEdit); FStateChanged := False; diff --git a/components/synedit/syneditmarkupselection.pp b/components/synedit/syneditmarkupselection.pp index 71ea54cda4..8b7dfabd10 100644 --- a/components/synedit/syneditmarkupselection.pp +++ b/components/synedit/syneditmarkupselection.pp @@ -43,7 +43,7 @@ type procedure SetUseIncrementalColor(const AValue : Boolean); procedure MarkupChangedIntern(AMarkup: TObject); public - constructor Create(ASynEdit : TCustomControl; ASelection: TSynEditSelection); + constructor Create(ASynEdit : TSynEditBase; ASelection: TSynEditSelection); destructor Destroy; override; Procedure PrepareMarkupForRow(aRow : Integer); override; @@ -76,7 +76,7 @@ begin else MarkupInfo.Assign(FMarkupInfoSelection); end; -constructor TSynEditMarkupSelection.Create(ASynEdit : TCustomControl; ASelection: TSynEditSelection); +constructor TSynEditMarkupSelection.Create(ASynEdit : TSynEditBase; ASelection: TSynEditSelection); begin inherited Create(ASynEdit); FSelection := ASelection; diff --git a/components/synedit/syneditmarkupspecialline.pp b/components/synedit/syneditmarkupspecialline.pp index e4fcfb3366..f05c48cded 100644 --- a/components/synedit/syneditmarkupspecialline.pp +++ b/components/synedit/syneditmarkupspecialline.pp @@ -47,13 +47,13 @@ type protected procedure DoMarkupLineHighlightInfoChange(Sender: TObject); function HasLineHighlight: Boolean; - procedure DoCaretChanged(OldCaret : TPoint); override; + procedure DoCaretChanged(Sender: TObject); override; procedure DoTopLineChanged(OldTopLine : Integer); override; procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override; procedure DoTextChanged(StartLine, EndLine : Integer); override; procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override; public - constructor Create(ASynEdit: TCustomControl); + constructor Create(ASynEdit: TSynEditBase); destructor Destroy; override; procedure PrepareMarkupForRow(ARow: Integer); override; @@ -71,8 +71,6 @@ type end; implementation -uses - SynEdit; { TSynEditMarkupBracket } @@ -92,7 +90,7 @@ begin (FMarkupLineHighlightInfo.Foreground <> clNone); end; -procedure TSynEditMarkupSpecialLine.DoCaretChanged(OldCaret: TPoint); +procedure TSynEditMarkupSpecialLine.DoCaretChanged(Sender: TObject); begin InvalidateLineHighlight; end; @@ -117,7 +115,7 @@ begin InvalidateLineHighlight; end; -constructor TSynEditMarkupSpecialLine.Create(ASynEdit: TCustomControl); +constructor TSynEditMarkupSpecialLine.Create(ASynEdit: TSynEditBase); begin inherited Create(ASynEdit); @@ -192,10 +190,10 @@ procedure TSynEditMarkupSpecialLine.InvalidateLineHighlight; var NewLine: Integer; begin - if not HasLineHighlight then + if (not HasLineHighlight) or (Caret = nil) then Exit; - NewLine := TSynEdit(SynEdit).CaretY; + NewLine := Caret.LinePos; // invalidate old line highlighting, if changed if (FHighlightedLine > 0) and (NewLine <> FHighlightedLine) then diff --git a/components/synedit/syneditmarkupwordgroup.pp b/components/synedit/syneditmarkupwordgroup.pp index f0a9c114ca..1e2a228e56 100644 --- a/components/synedit/syneditmarkupwordgroup.pp +++ b/components/synedit/syneditmarkupwordgroup.pp @@ -49,14 +49,14 @@ type protected procedure FindMatchingWords(PhysCaret: TPoint; out Word1, Word2, Word3: TWordPoint); - procedure DoCaretChanged(OldCaret : TPoint); override; + procedure DoCaretChanged(Sender: TObject); override; procedure DoTopLineChanged(OldTopLine : Integer); override; procedure DoLinesInWindoChanged(OldLinesInWindow : Integer); override; procedure DoTextChanged(StartLine, EndLine : Integer); override; procedure DoMarkupChanged(AMarkup: TSynSelectedColor); override; procedure InvalidateCurrentHighlight; public - constructor Create(ASynEdit: TCustomControl); + constructor Create(ASynEdit: TSynEditBase); function GetMarkupAttributeAtRowCol(const aRow, aCol: Integer): TSynSelectedColor; override; function GetNextMarkupColAfterRowCol(const aRow, aCol: Integer): Integer; override; @@ -66,8 +66,6 @@ type end; implementation -uses - SynEdit; Function CompareWordPoints(P1, P2: TWordPoint): Integer; begin @@ -89,7 +87,7 @@ end; { TSynEditMarkupWordGroup } -constructor TSynEditMarkupWordGroup.Create(ASynEdit : TCustomControl); +constructor TSynEditMarkupWordGroup.Create(ASynEdit : TSynEditBase); begin inherited Create(ASynEdit); FHighlightPos1.Y := -1; @@ -206,7 +204,7 @@ begin if not (FHighlighter is TSynCustomFoldHighlighter) then exit; hl := TSynCustomFoldHighlighter(FHighlighter); - LogCaretXY := TSynEdit(SynEdit).PhysicalToLogicalPos(PhysCaret); + LogCaretXY := Lines.PhysicalToLogicalPos(PhysCaret); y := LogCaretXY.Y - 1; LCnt := Lines.Count; HL.CurrentLines := Lines; @@ -273,24 +271,25 @@ begin end; if Word1.Y > 0 then begin - Word1.X := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word1.X, Word1.Y)).X; - Word1.X2 := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word1.X2, Word1.Y)).X; + Word1.X := Lines.LogicalToPhysicalPos(Point(Word1.X, Word1.Y)).X; + Word1.X2 := Lines.LogicalToPhysicalPos(Point(Word1.X2, Word1.Y)).X; end; if Word2.Y > 0 then begin - Word2.X := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word2.X, Word2.Y)).X; - Word2.X2 := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word2.X2, Word2.Y)).X; + Word2.X := Lines.LogicalToPhysicalPos(Point(Word2.X, Word2.Y)).X; + Word2.X2 := Lines.LogicalToPhysicalPos(Point(Word2.X2, Word2.Y)).X; end; if Word3.Y > 0 then begin - Word3.X := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word3.X, Word3.Y)).X; - Word3.X2 := TSynEdit(SynEdit).LogicalToPhysicalPos(Point(Word3.X2, Word3.Y)).X; + Word3.X := Lines.LogicalToPhysicalPos(Point(Word3.X, Word3.Y)).X; + Word3.X2 := Lines.LogicalToPhysicalPos(Point(Word3.X2, Word3.Y)).X; end; end; -procedure TSynEditMarkupWordGroup.DoCaretChanged(OldCaret: TPoint); +procedure TSynEditMarkupWordGroup.DoCaretChanged(Sender: TObject); var C: TPoint; begin - C := TSynEdit(SynEdit).CaretXY; + if Caret = nil then exit; + C := Caret.LineCharPos; if ( (C.Y = FHighlightPos1.Y) and (C.X >= FHighlightPos1.X) and (C.X <= FHighlightPos1.X2) ) or ( (C.Y = FHighlightPos2.Y) and (C.X >= FHighlightPos2.X) and (C.X <= FHighlightPos2.X2) ) or ( (C.Y = FHighlightPos3.Y) and (C.X >= FHighlightPos3.X) and (C.X <= FHighlightPos3.X2) ) then @@ -320,7 +319,8 @@ procedure TSynEditMarkupWordGroup.InvalidateCurrentHighlight; var NewPos, NewAntiPos, NewMiddlePos : TWordPoint; begin - FindMatchingWords(TSynEdit(SynEdit).CaretXY, NewPos, NewAntiPos, NewMiddlePos); + if Caret = nil then exit; + FindMatchingWords(Caret.LineCharPos, NewPos, NewAntiPos, NewMiddlePos); // invalidate old highlighting, if changed if (FHighlightPos1.Y > 0)