You've already forked lazarus-ccr
richmemo: win32 surpress undesired on selection change notifications, correct line spacing adjustments
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3813 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -351,10 +351,12 @@ class procedure TWin32WSCustomRichMemo.SetTextAttributes(const AWinControl: TWin
|
|||||||
var
|
var
|
||||||
OrigStart : Integer;
|
OrigStart : Integer;
|
||||||
OrigLen : Integer;
|
OrigLen : Integer;
|
||||||
NeedLock : Boolean;
|
NeedLock : Boolean;
|
||||||
|
eventmask : Integer;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
|
||||||
|
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
|
|
||||||
NeedLock := (OrigStart <> TextStart) or (OrigLen <> TextLen);
|
NeedLock := (OrigStart <> TextStart) or (OrigLen <> TextLen);
|
||||||
@@ -366,6 +368,8 @@ begin
|
|||||||
UnlockRedraw(AWinControl.Handle);
|
UnlockRedraw(AWinControl.Handle);
|
||||||
end else
|
end else
|
||||||
RichEditManager.SetSelectedTextStyle(AWinControl.Handle, Params);
|
RichEditManager.SetSelectedTextStyle(AWinControl.Handle, Params);
|
||||||
|
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TWin32WSCustomRichMemo.GetTextAttributes(const AWinControl: TWinControl;
|
class function TWin32WSCustomRichMemo.GetTextAttributes(const AWinControl: TWinControl;
|
||||||
@@ -380,9 +384,8 @@ begin
|
|||||||
Result := false;
|
Result := false;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
eventmask := SendMessage(AWinControl.Handle, EM_GETEVENTMASK, 0, 0);
|
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
SendMessage(AWinControl.Handle, EM_SETEVENTMASK, 0, 0);
|
|
||||||
|
|
||||||
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
|
|
||||||
@@ -398,8 +401,8 @@ begin
|
|||||||
Result := RichEditManager.GetSelectedTextStyle(AWinControl.Handle, Params);
|
Result := RichEditManager.GetSelectedTextStyle(AWinControl.Handle, Params);
|
||||||
UnlockRedraw(AWinControl.Handle, false);
|
UnlockRedraw(AWinControl.Handle, false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
SendMessage(AWinControl.Handle, EM_SETEVENTMASK, 0, eventmask);
|
RichEditManager.SetEventMask(AWinControl.Handle,eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@@ -433,10 +436,9 @@ begin
|
|||||||
Result := false;
|
Result := false;
|
||||||
Exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
eventmask := SendMessage(AWinControl.Handle, EM_GETEVENTMASK, 0, 0);
|
eventmask := RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
SendMessage(AWinControl.Handle, EM_SETEVENTMASK, 0, 0);
|
|
||||||
|
|
||||||
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.GetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
LockRedraw(AWinControl.Handle);
|
LockRedraw(AWinControl.Handle);
|
||||||
InitScrollInfo(hInfo);
|
InitScrollInfo(hInfo);
|
||||||
@@ -457,7 +459,7 @@ begin
|
|||||||
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
RichEditManager.SetSelection(AWinControl.Handle, OrigStart, OrigLen);
|
||||||
UnlockRedraw(AWinControl.Handle, false);
|
UnlockRedraw(AWinControl.Handle, false);
|
||||||
|
|
||||||
SendMessage(AWinControl.Handle, EM_SETEVENTMASK, 0, eventmask);
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TWin32WSCustomRichMemo.LoadRichText(
|
class function TWin32WSCustomRichMemo.LoadRichText(
|
||||||
@@ -481,9 +483,13 @@ class function TWin32WSCustomRichMemo.GetParaAlignment(
|
|||||||
): Boolean;
|
): Boolean;
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: Integer;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
|
|
||||||
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
||||||
case para.wAlignment of
|
case para.wAlignment of
|
||||||
PFA_CENTER: AAlign:=paCenter;
|
PFA_CENTER: AAlign:=paCenter;
|
||||||
@@ -492,6 +498,8 @@ begin
|
|||||||
else
|
else
|
||||||
AAlign:=paLeft;
|
AAlign:=paLeft;
|
||||||
end;
|
end;
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
|
|
||||||
Result:=true;
|
Result:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -499,15 +507,20 @@ class procedure TWin32WSCustomRichMemo.SetParaAlignment(
|
|||||||
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: TIntParaAlignment);
|
const AWinControl: TWinControl; TextStart, TextLen: Integer; const AAlign: TIntParaAlignment);
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: Integer;
|
||||||
const
|
const
|
||||||
WinPara : array [TIntParaAlignment] of word = (PFA_LEFT, PFA_RIGHT, PFA_CENTER, PFA_JUSTIFY);
|
WinPara : array [TIntParaAlignment] of word = (PFA_LEFT, PFA_RIGHT, PFA_CENTER, PFA_JUSTIFY);
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
|
|
||||||
FillChar(para, sizeof(para), 0);
|
FillChar(para, sizeof(para), 0);
|
||||||
para.cbSize:=sizeof(para);
|
para.cbSize:=sizeof(para);
|
||||||
para.dwMask:=PFM_ALIGNMENT;
|
para.dwMask:=PFM_ALIGNMENT;
|
||||||
para.wAlignment:=WinPara[AAlign];
|
para.wAlignment:=WinPara[AAlign];
|
||||||
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
|
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
|
||||||
|
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TWin32WSCustomRichMemo.GetParaMetric(
|
class function TWin32WSCustomRichMemo.GetParaMetric(
|
||||||
@@ -515,9 +528,13 @@ class function TWin32WSCustomRichMemo.GetParaMetric(
|
|||||||
var AMetrics: TIntParaMetric): Boolean;
|
var AMetrics: TIntParaMetric): Boolean;
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: Integer;
|
||||||
begin
|
begin
|
||||||
Result:=false;
|
Result:=false;
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
|
|
||||||
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
||||||
|
|
||||||
AMetrics.FirstLine:=para.dxStartIndent/20;
|
AMetrics.FirstLine:=para.dxStartIndent/20;
|
||||||
@@ -525,7 +542,9 @@ begin
|
|||||||
AMetrics.HeadIndent:=(para.dxStartIndent+para.dxOffset)/20;
|
AMetrics.HeadIndent:=(para.dxStartIndent+para.dxOffset)/20;
|
||||||
AMetrics.SpaceAfter:=para.dySpaceAfter/20;
|
AMetrics.SpaceAfter:=para.dySpaceAfter/20;
|
||||||
AMetrics.SpaceBefore:=para.dySpaceBefore/20;
|
AMetrics.SpaceBefore:=para.dySpaceBefore/20;
|
||||||
AMetrics.LineSpacing:=para.dyLineSpacing/20;
|
AMetrics.LineSpacing:=para.dyLineSpacing*DefLineSpacing/20;
|
||||||
|
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class procedure TWin32WSCustomRichMemo.SetParaMetric(
|
class procedure TWin32WSCustomRichMemo.SetParaMetric(
|
||||||
@@ -533,6 +552,7 @@ class procedure TWin32WSCustomRichMemo.SetParaMetric(
|
|||||||
const AMetrics: TIntParaMetric);
|
const AMetrics: TIntParaMetric);
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: Integer;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
FillChar(para, SizeOf(para), 0);
|
FillChar(para, SizeOf(para), 0);
|
||||||
@@ -550,10 +570,13 @@ begin
|
|||||||
para.dySpaceAfter:=round(AMetrics.SpaceAfter*20);
|
para.dySpaceAfter:=round(AMetrics.SpaceAfter*20);
|
||||||
para.dySpaceBefore:=round(AMetrics.SpaceBefore*20);
|
para.dySpaceBefore:=round(AMetrics.SpaceBefore*20);
|
||||||
if AMetrics.LineSpacing > 0 then begin
|
if AMetrics.LineSpacing > 0 then begin
|
||||||
para.dyLineSpacing:=round(AMetrics.LineSpacing*20);
|
para.dyLineSpacing:=round(AMetrics.LineSpacing/DefLineSpacing*20);
|
||||||
para.bLineSpacingRule:=5; // always line spacing?
|
para.bLineSpacingRule:=5; // always line spacing?
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLength, para);
|
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLength, para);
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TWin32WSCustomRichMemo.GetParaRange(const AWinControl: TWinControl;
|
class function TWin32WSCustomRichMemo.GetParaRange(const AWinControl: TWinControl;
|
||||||
@@ -580,11 +603,15 @@ class function TWin32WSCustomRichMemo.GetParaNumbering(
|
|||||||
var ANumber: TIntParaNumbering): Boolean;
|
var ANumber: TIntParaNumbering): Boolean;
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: INteger;
|
||||||
begin
|
begin
|
||||||
Result:=False;
|
Result:=False;
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
|
|
||||||
case para.wNumbering of
|
case para.wNumbering of
|
||||||
PFN_BULLET: ANumber.Numbering:=pnBullet;
|
PFN_BULLET: ANumber.Numbering:=pnBullet;
|
||||||
PFN_ARABIC: ANumber.Numbering:=pnNumber;
|
PFN_ARABIC: ANumber.Numbering:=pnNumber;
|
||||||
@@ -608,6 +635,7 @@ class procedure TWin32WSCustomRichMemo.SetParaNumbering(
|
|||||||
const ANumber: TIntParaNumbering);
|
const ANumber: TIntParaNumbering);
|
||||||
var
|
var
|
||||||
para : PARAFORMAT2;
|
para : PARAFORMAT2;
|
||||||
|
eventmask: INteger;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
FillChar(para, SizeOf(para), 0);
|
FillChar(para, SizeOf(para), 0);
|
||||||
@@ -631,14 +659,20 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
para.wNumberingTab:=round(ANumber.NumIndent*20);
|
para.wNumberingTab:=round(ANumber.NumIndent*20);
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
|
RichEditManager.SetPara2(AWinControl.Handle, TextStart, TextLen, para);
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask)
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class procedure TWin32WSCustomRichMemo.InDelText(const AWinControl:TWinControl;
|
class procedure TWin32WSCustomRichMemo.InDelText(const AWinControl:TWinControl;
|
||||||
const TextUTF8:String;DstStart,DstLen:Integer);
|
const TextUTF8:String;DstStart,DstLen:Integer);
|
||||||
|
var
|
||||||
|
eventmask : Integer;
|
||||||
begin
|
begin
|
||||||
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit;
|
||||||
|
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
|
||||||
RichEditManager.SetText(AWinControl.Handle,UTF8Decode(TextUTF8),DstStart,DstLen);
|
RichEditManager.SetText(AWinControl.Handle,UTF8Decode(TextUTF8),DstStart,DstLen);
|
||||||
|
RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
class function TWin32WSCustomRichMemo.Search(const AWinControl: TWinControl;
|
class function TWin32WSCustomRichMemo.Search(const AWinControl: TWinControl;
|
||||||
|
@@ -148,6 +148,8 @@ type
|
|||||||
|
|
||||||
TRichEditManager = class(TObject)
|
TRichEditManager = class(TObject)
|
||||||
public
|
public
|
||||||
|
class function SetEventMask(RichEditWnd: Handle; eventmask: integer): Integer;
|
||||||
|
|
||||||
class function GetTextLength(RichEditWnd: Handle): Integer;
|
class function GetTextLength(RichEditWnd: Handle): Integer;
|
||||||
class function SetSelectedTextStyle(RichEditWnd: Handle; Params: TIntFontParams): Boolean; virtual;
|
class function SetSelectedTextStyle(RichEditWnd: Handle; Params: TIntFontParams): Boolean; virtual;
|
||||||
class function GetSelectedTextStyle(RichEditWnd: Handle; var Params: TIntFontParams): Boolean; virtual;
|
class function GetSelectedTextStyle(RichEditWnd: Handle; var Params: TIntFontParams): Boolean; virtual;
|
||||||
@@ -263,6 +265,12 @@ end;
|
|||||||
|
|
||||||
{ TRichEditManager }
|
{ TRichEditManager }
|
||||||
|
|
||||||
|
class function TRichEditManager.SetEventMask(RichEditWnd: Handle; eventmask: integer): Integer;
|
||||||
|
begin
|
||||||
|
Result := SendMessage(RichEditWnd, EM_GETEVENTMASK, 0, 0);
|
||||||
|
SendMessage(RichEditWnd, EM_SETEVENTMASK, 0, eventmask);
|
||||||
|
end;
|
||||||
|
|
||||||
class function TRichEditManager.GetTextLength(RichEditWnd: Handle): Integer;
|
class function TRichEditManager.GetTextLength(RichEditWnd: Handle): Integer;
|
||||||
var
|
var
|
||||||
textlen : TGETTEXTEX;
|
textlen : TGETTEXTEX;
|
||||||
@@ -351,7 +359,7 @@ var
|
|||||||
sel : TCHARRANGE;
|
sel : TCHARRANGE;
|
||||||
d : Integer;
|
d : Integer;
|
||||||
last : Integer;
|
last : Integer;
|
||||||
|
|
||||||
const
|
const
|
||||||
ALL_MASK = CFM_BOLD or CFM_ITALIC or CFM_STRIKEOUT or CFM_UNDERLINE or
|
ALL_MASK = CFM_BOLD or CFM_ITALIC or CFM_STRIKEOUT or CFM_UNDERLINE or
|
||||||
CFM_SIZE or CFM_COLOR or CFM_FACE;
|
CFM_SIZE or CFM_COLOR or CFM_FACE;
|
||||||
@@ -434,6 +442,7 @@ begin
|
|||||||
|
|
||||||
RangeStart := sel.cpMin;
|
RangeStart := sel.cpMin;
|
||||||
RangeLen := last - sel.cpMin - 1;
|
RangeLen := last - sel.cpMin - 1;
|
||||||
|
|
||||||
Result := true;
|
Result := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -554,6 +563,7 @@ var
|
|||||||
s, l : Integer;
|
s, l : Integer;
|
||||||
begin
|
begin
|
||||||
GetSelection(RichEditWnd, s, l);
|
GetSelection(RichEditWnd, s, l);
|
||||||
|
|
||||||
SetSelection(RichEditWnd, TextStart, 0);
|
SetSelection(RichEditWnd, TextStart, 0);
|
||||||
|
|
||||||
FillChar(para, sizeof(para), 0);
|
FillChar(para, sizeof(para), 0);
|
||||||
|
Reference in New Issue
Block a user