richmemo: efficient way of setting attributes

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4377 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz
2015-10-12 20:20:41 +00:00
parent 180a1d049d
commit 3e0fabe544
4 changed files with 96 additions and 21 deletions

View File

@@ -72,6 +72,11 @@ type
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): HWND; override;
class function GetTextAttributes(const AWinControl: TWinControl; TextStart: Integer;
var Params: TIntFontParams): Boolean; override;
class function isInternalChange(const AWinControl: TWinControl; Params: TTextModifyMask): Boolean; override;
class procedure SetTextAttributesInternal(const AWinControl: TWinControl; TextStart, TextLen: Integer;
const AModifyMask: TTextModifyMask; const Params: TIntFontParams); override;
class procedure SetTextAttributes(const AWinControl: TWinControl; TextStart, TextLen: Integer;
const Params: TIntFontParams); override;
class procedure SetHideSelection(const ACustomEdit: TCustomEdit; AHideSelection: Boolean); override;
@@ -583,6 +588,37 @@ begin
RichEditManager.SetEventMask(AWinControl.Handle,eventmask);
end;
class function TWin32WSCustomRichMemo.isInternalChange(
const AWinControl: TWinControl; Params: TTextModifyMask): Boolean;
begin
Result:=True;
end;
class procedure TWin32WSCustomRichMemo.SetTextAttributesInternal(
const AWinControl: TWinControl; TextStart, TextLen: Integer;
const AModifyMask: TTextModifyMask; const Params: TIntFontParams);
var
OrigStart : Integer;
OrigLen : Integer;
eventmask : longword;
NeedLock : Boolean;
begin
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
NeedLock := (OrigStart <> TextStart) or (OrigLen <> TextLen);
if NeedLock then begin
LockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
RichEditManager.SetSelection(AWinControl.Handle, TextStart, TextLen);
RichEditManager.SetSelectedTextStyle(AWinControl.Handle, Params, True, AModifyMask);
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
UnlockRedraw( TCustomRichMemo(AWinControl), AWinControl.Handle);
end else
RichEditManager.SetSelectedTextStyle(AWinControl.Handle, Params, True, AModifyMask);
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
end;
class procedure TWin32WSCustomRichMemo.SetHideSelection(
const ACustomEdit: TCustomEdit; AHideSelection: Boolean);