richmemo: improve win32 numbering

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3842 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz
2014-12-17 03:32:59 +00:00
parent 42b8235d52
commit 4cae993724
3 changed files with 45 additions and 7 deletions

View File

@ -62,14 +62,15 @@ type
Style : TParaNumStyle; Style : TParaNumStyle;
Indent : Double; Indent : Double;
CustomChar : WideChar; CustomChar : WideChar;
NumberStart : Integer; // must be negative one to continue numbering, used for pnNumber only NumberStart : Integer; // used for pnNumber only
SepChar : WideChar; SepChar : WideChar;
ForceNewNum : Boolean; // if true and Style is pnNumber, NumberStart is used for the new numbering
end; end;
const const
SepNone : WideChar = #0; SepNone = #0;
SepPar : WideChar = ')'; SepPar = ')';
SepDot : WideChar = '.'; SepDot = '.';
type type
@ -228,6 +229,8 @@ function GetFontParams(const Name: String; Size: Integer; color: TColor; styles:
procedure InitParaMetric(var m: TParaMetric); procedure InitParaMetric(var m: TParaMetric);
procedure InitParaNumbering(var n: TParaNumbering); procedure InitParaNumbering(var n: TParaNumbering);
procedure InitParaNumber(var n: TParaNumbering; ASepChar: WideChar = SepPar; StartNum: Integer = 1);
procedure InitParaBullet(var n: TParaNumbering);
var var
RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil; RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil;
@ -278,6 +281,20 @@ begin
FillChar(n, sizeof(n), 0); FillChar(n, sizeof(n), 0);
end; end;
procedure InitParaNumber(var n: TParaNumbering; ASepChar: WideChar; StartNum: Integer);
begin
InitParaNumbering(n);
n.Style:=pnNumber;
n.NumberStart:=StartNum;
n.SepChar:=ASepChar;
end;
procedure InitParaBullet(var n: TParaNumbering);
begin
InitParaNumbering(n);
n.Style:=pnBullet;
end;
{ TRichMemo } { TRichMemo }
function TRichMemo.GetRTF: string; function TRichMemo.GetRTF: string;

View File

@ -610,6 +610,7 @@ 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;
InitParaNumbering(ANumber);
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0); eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);
RichEditManager.GetPara2(AWinControl.Handle, TextStart, para); RichEditManager.GetPara2(AWinControl.Handle, TextStart, para);
RichEditManager.SetEventMask(AWinControl.Handle, eventmask); RichEditManager.SetEventMask(AWinControl.Handle, eventmask);
@ -628,8 +629,14 @@ begin
else else
ANumber.Style:=pnNone; ANumber.Style:=pnNone;
end; end;
if para.wNumberingStyle or PFNS_PLAIN > 0 then
ANumber.SepChar:=SepNone
else if para.wNumberingStyle or PFNS_PERIOD > 0 then
ANumber.SepChar:=SepDot
else if (ANumber.Style<>pnNone) and ((para.wNumberingStyle and PFNS_SOMESEPCHAR)= 0) then
ANumber.SepChar:=SepPar;
ANumber.Indent:=para.wNumberingTab/20; ANumber.Indent:=para.wNumberingTab/20;
Result:=true Result:=true;
end; end;
class procedure TWin32WSCustomRichMemo.SetParaNumbering( class procedure TWin32WSCustomRichMemo.SetParaNumbering(
@ -637,7 +644,8 @@ class procedure TWin32WSCustomRichMemo.SetParaNumbering(
const ANumber: TIntParaNumbering); const ANumber: TIntParaNumbering);
var var
para : PARAFORMAT2; para : PARAFORMAT2;
eventmask: INteger; eventmask: Integer;
numbstyle: 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);
@ -645,6 +653,13 @@ begin
para.cbSize:=sizeof(para); para.cbSize:=sizeof(para);
para.dwMask:= para.dwMask:=
PFM_NUMBERING or PFM_NUMBERINGTAB; PFM_NUMBERING or PFM_NUMBERINGTAB;
numbstyle:=0;
case ANumber.SepChar of
SepPar: numbstyle:=numbstyle or PFNS_PAREN;
SepDot: numbstyle:=numbstyle or PFNS_PERIOD;
SepNone: numbstyle:=numbstyle or PFNS_PLAIN;
end;
case ANumber.Style of case ANumber.Style of
pnNone: para.wNumbering:=0; pnNone: para.wNumbering:=0;
pnBullet: para.wNumbering:=PFN_BULLET; pnBullet: para.wNumbering:=PFN_BULLET;
@ -652,7 +667,7 @@ begin
para.wNumbering:=PFN_ARABIC; para.wNumbering:=PFN_ARABIC;
para.dwMask:=para.dwMask or PFM_NUMBERINGSTART; para.dwMask:=para.dwMask or PFM_NUMBERINGSTART;
para.wNumberingStart:=ANumber.NumberStart; para.wNumberingStart:=ANumber.NumberStart;
para.wNumberingStyle:=PFNS_NEWNUMBER; if ANumber.ForceNewNum then numbstyle:=numbstyle or PFNS_NEWNUMBER;
end; end;
pnLowLetter: para.wNumbering:=PFN_LCLETTER; pnLowLetter: para.wNumbering:=PFN_LCLETTER;
pnLowRoman: para.wNumbering:=PFN_LCROMAN; pnLowRoman: para.wNumbering:=PFN_LCROMAN;
@ -664,6 +679,10 @@ begin
para.dwMask:=para.dwMask or PFM_NUMBERINGSTART; para.dwMask:=para.dwMask or PFM_NUMBERINGSTART;
end; end;
end; end;
if numbstyle<> 0 then begin
para.dwMask:=para.dwMask or PFM_NUMBERINGSTYLE;
para.wNumberingStyle:=numbstyle;
end;
para.wNumberingTab:=round(ANumber.Indent*20); para.wNumberingTab:=round(ANumber.Indent*20);
eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0); eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0);

View File

@ -191,6 +191,8 @@ const
PFNS_PLAIN = $0300; PFNS_PLAIN = $0300;
PFNS_NONUMBER = $0400; PFNS_NONUMBER = $0400;
PFNS_NEWNUMBER = $8000; PFNS_NEWNUMBER = $8000;
PFNS_SOMESEPCHAR = PFNS_PARENS or PFNS_PERIOD or PFNS_PLAIN;
implementation implementation