From 4cae993724bafb46a2aa6261de3b321133b61745 Mon Sep 17 00:00:00 2001 From: skalogryz Date: Wed, 17 Dec 2014 03:32:59 +0000 Subject: [PATCH] richmemo: improve win32 numbering git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3842 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/richmemo/richmemo.pas | 25 ++++++++++++++++--- components/richmemo/win32/win32richmemo.pas | 25 ++++++++++++++++--- .../richmemo/win32/win32richmemoproc.pas | 2 ++ 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/components/richmemo/richmemo.pas b/components/richmemo/richmemo.pas index de0f4ee37..f40ca1da9 100644 --- a/components/richmemo/richmemo.pas +++ b/components/richmemo/richmemo.pas @@ -62,14 +62,15 @@ type Style : TParaNumStyle; Indent : Double; CustomChar : WideChar; - NumberStart : Integer; // must be negative one to continue numbering, used for pnNumber only + NumberStart : Integer; // used for pnNumber only SepChar : WideChar; + ForceNewNum : Boolean; // if true and Style is pnNumber, NumberStart is used for the new numbering end; const - SepNone : WideChar = #0; - SepPar : WideChar = ')'; - SepDot : WideChar = '.'; + SepNone = #0; + SepPar = ')'; + SepDot = '.'; type @@ -228,6 +229,8 @@ function GetFontParams(const Name: String; Size: Integer; color: TColor; styles: procedure InitParaMetric(var m: TParaMetric); procedure InitParaNumbering(var n: TParaNumbering); +procedure InitParaNumber(var n: TParaNumbering; ASepChar: WideChar = SepPar; StartNum: Integer = 1); +procedure InitParaBullet(var n: TParaNumbering); var RTFLoadStream : function (AMemo: TCustomRichMemo; Source: TStream): Boolean = nil; @@ -278,6 +281,20 @@ begin FillChar(n, sizeof(n), 0); 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 } function TRichMemo.GetRTF: string; diff --git a/components/richmemo/win32/win32richmemo.pas b/components/richmemo/win32/win32richmemo.pas index 0bcf617f0..d5a5291a4 100644 --- a/components/richmemo/win32/win32richmemo.pas +++ b/components/richmemo/win32/win32richmemo.pas @@ -610,6 +610,7 @@ begin Result:=False; if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit; + InitParaNumbering(ANumber); eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0); RichEditManager.GetPara2(AWinControl.Handle, TextStart, para); RichEditManager.SetEventMask(AWinControl.Handle, eventmask); @@ -628,8 +629,14 @@ begin else ANumber.Style:=pnNone; 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; - Result:=true + Result:=true; end; class procedure TWin32WSCustomRichMemo.SetParaNumbering( @@ -637,7 +644,8 @@ class procedure TWin32WSCustomRichMemo.SetParaNumbering( const ANumber: TIntParaNumbering); var para : PARAFORMAT2; - eventmask: INteger; + eventmask: Integer; + numbstyle: Integer; begin if not Assigned(RichEditManager) or not Assigned(AWinControl) then Exit; FillChar(para, SizeOf(para), 0); @@ -645,6 +653,13 @@ begin para.cbSize:=sizeof(para); para.dwMask:= 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 pnNone: para.wNumbering:=0; pnBullet: para.wNumbering:=PFN_BULLET; @@ -652,7 +667,7 @@ begin para.wNumbering:=PFN_ARABIC; para.dwMask:=para.dwMask or PFM_NUMBERINGSTART; para.wNumberingStart:=ANumber.NumberStart; - para.wNumberingStyle:=PFNS_NEWNUMBER; + if ANumber.ForceNewNum then numbstyle:=numbstyle or PFNS_NEWNUMBER; end; pnLowLetter: para.wNumbering:=PFN_LCLETTER; pnLowRoman: para.wNumbering:=PFN_LCROMAN; @@ -664,6 +679,10 @@ begin para.dwMask:=para.dwMask or PFM_NUMBERINGSTART; end; end; + if numbstyle<> 0 then begin + para.dwMask:=para.dwMask or PFM_NUMBERINGSTYLE; + para.wNumberingStyle:=numbstyle; + end; para.wNumberingTab:=round(ANumber.Indent*20); eventmask:=RichEditManager.SetEventMask(AWinControl.Handle, 0); diff --git a/components/richmemo/win32/win32richmemoproc.pas b/components/richmemo/win32/win32richmemoproc.pas index 7780066bd..af907d17c 100644 --- a/components/richmemo/win32/win32richmemoproc.pas +++ b/components/richmemo/win32/win32richmemoproc.pas @@ -191,6 +191,8 @@ const PFNS_PLAIN = $0300; PFNS_NONUMBER = $0400; PFNS_NEWNUMBER = $8000; + PFNS_SOMESEPCHAR = PFNS_PARENS or PFNS_PERIOD or PFNS_PLAIN; + implementation