You've already forked lazarus-ccr
richmemo: adding the check for a valid character offset, for most GetXXXX attributes methods. bug #32296
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7282 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -206,6 +206,7 @@ type
|
|||||||
LinkStart, LinkEnd: Integer);
|
LinkStart, LinkEnd: Integer);
|
||||||
function GetCanRedo: Boolean; virtual;
|
function GetCanRedo: Boolean; virtual;
|
||||||
|
|
||||||
|
function isValidCharOfs(TextStart: integer): Boolean;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
procedure CopyToClipboard; override;
|
procedure CopyToClipboard; override;
|
||||||
@ -677,7 +678,8 @@ function TCustomRichMemo.GetTextAttributes(TextStart: Integer; var TextParams: T
|
|||||||
begin
|
begin
|
||||||
if not HandleAllocated then HandleNeeded;
|
if not HandleAllocated then HandleNeeded;
|
||||||
if HandleAllocated then
|
if HandleAllocated then
|
||||||
Result := TWSCustomRichMemoClass(WidgetSetClass).GetTextAttributes(Self, TextStart, TextParams)
|
Result := isValidCharOfs(TextStart)
|
||||||
|
and TWSCustomRichMemoClass(WidgetSetClass).GetTextAttributes(Self, TextStart, TextParams)
|
||||||
else
|
else
|
||||||
Result := false;
|
Result := false;
|
||||||
end;
|
end;
|
||||||
@ -686,7 +688,7 @@ function TCustomRichMemo.GetStyleRange(CharOfs: Integer; var RangeStart,
|
|||||||
RangeLen: Integer): Boolean;
|
RangeLen: Integer): Boolean;
|
||||||
begin
|
begin
|
||||||
if HandleAllocated then begin
|
if HandleAllocated then begin
|
||||||
Result := TWSCustomRichMemoClass(WidgetSetClass).GetStyleRange(Self, CharOfs, RangeStart, RangeLen);
|
Result := isValidCharOfs(CharOfs) and TWSCustomRichMemoClass(WidgetSetClass).GetStyleRange(Self, CharOfs, RangeStart, RangeLen);
|
||||||
if Result and (RangeLen = 0) then RangeLen := 1;
|
if Result and (RangeLen = 0) then RangeLen := 1;
|
||||||
end else begin
|
end else begin
|
||||||
RangeStart := -1;
|
RangeStart := -1;
|
||||||
@ -698,8 +700,9 @@ end;
|
|||||||
function TCustomRichMemo.GetParaAlignment(TextStart: Integer;
|
function TCustomRichMemo.GetParaAlignment(TextStart: Integer;
|
||||||
var AAlign: TParaAlignment): Boolean;
|
var AAlign: TParaAlignment): Boolean;
|
||||||
begin
|
begin
|
||||||
Result := HandleAllocated and
|
Result := HandleAllocated
|
||||||
TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, AAlign);
|
and isValidCharOfs(TextStart)
|
||||||
|
and TWSCustomRichMemoClass(WidgetSetClass).GetParaAlignment(Self, TextStart, AAlign);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomRichMemo.GetParaAlignment(TextStart: Integer): TParaAlignment;
|
function TCustomRichMemo.GetParaAlignment(TextStart: Integer): TParaAlignment;
|
||||||
@ -718,7 +721,8 @@ function TCustomRichMemo.GetParaMetric(TextStart: Integer;
|
|||||||
var AMetric: TParaMetric): Boolean;
|
var AMetric: TParaMetric): Boolean;
|
||||||
begin
|
begin
|
||||||
if HandleAllocated then
|
if HandleAllocated then
|
||||||
Result := TWSCustomRichMemoClass(WidgetSetClass).GetParaMetric(Self, TextStart, AMetric)
|
Result := isValidCharOfs(TextStart)
|
||||||
|
and TWSCustomRichMemoClass(WidgetSetClass).GetParaMetric(Self, TextStart, AMetric)
|
||||||
else
|
else
|
||||||
Result := false;
|
Result := false;
|
||||||
end;
|
end;
|
||||||
@ -752,7 +756,8 @@ begin
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
if not HandleAllocated then HandleNeeded;
|
if not HandleAllocated then HandleNeeded;
|
||||||
if HandleAllocated then
|
if HandleAllocated then
|
||||||
Result:=TWSCustomRichMemoClass(WidgetSetClass).GetParaRange(Self, CharOfs, ParaRange);
|
Result:=isValidCharOfs(CharOfs)
|
||||||
|
and TWSCustomRichMemoClass(WidgetSetClass).GetParaRange(Self, CharOfs, ParaRange);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomRichMemo.GetParaRange(CharOfs: Integer; var TextStart,
|
function TCustomRichMemo.GetParaRange(CharOfs: Integer; var TextStart,
|
||||||
@ -777,7 +782,8 @@ begin
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
if not HandleAllocated then HandleNeeded;
|
if not HandleAllocated then HandleNeeded;
|
||||||
if HandleAllocated then
|
if HandleAllocated then
|
||||||
Result:=TWSCustomRichMemoClass(WidgetSetClass).GetParaTabs(Self, CharOfs, AStopList);
|
Result:= isValidCharOfs(CharOfs)
|
||||||
|
and TWSCustomRichMemoClass(WidgetSetClass).GetParaTabs(Self, CharOfs, AStopList);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCustomRichMemo.GetContStyleLength(TextStart: Integer): Integer;
|
function TCustomRichMemo.GetContStyleLength(TextStart: Integer): Integer;
|
||||||
@ -1119,6 +1125,14 @@ begin
|
|||||||
Result:=false;
|
Result:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCustomRichMemo.isValidCharOfs(TextStart: integer): Boolean;
|
||||||
|
begin
|
||||||
|
// TextStart, where TextStart = GetTextLen, is a location at the end of the text
|
||||||
|
// it's technically a valid character offset (position)
|
||||||
|
// Because it's where the entry should occur
|
||||||
|
Result := (TextStart >= 0) and (TextStart <= GetTextLen);
|
||||||
|
end;
|
||||||
|
|
||||||
function TCustomRichMemo.PrintMeasure(const params: TPrintParams; var est: TPrintMeasure): Boolean;
|
function TCustomRichMemo.PrintMeasure(const params: TPrintParams; var est: TPrintMeasure): Boolean;
|
||||||
begin
|
begin
|
||||||
if not Assigned(Printer) then begin
|
if not Assigned(Printer) then begin
|
||||||
|
Reference in New Issue
Block a user