richmemo: added modified paragraph modified mask.

update the paragraph demo to adjust paragraph metrics

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3786 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz 2014-11-26 17:41:48 +00:00
parent 566b81ba6a
commit 5dc465cd2f
3 changed files with 132 additions and 3 deletions

View File

@ -59,6 +59,7 @@ type
end;
TTextModifyMask = set of (tmm_Color, tmm_Name, tmm_Size, tmm_Styles);
TParaModifyMask = set of (pmm_FirstLine, pmm_HeadIndent, pmm_TailIndent, pmm_SpaceBefore, pmm_SpaceAfter, pmm_LineSpacing);
TSearchOption = (soMatchCase, soWholeWord, soBackward);
TSearchOptions = set of TSearchOption;
@ -112,6 +113,8 @@ type
procedure SetRangeColor(TextStart, TextLength: Integer; FontColor: TColor);
procedure SetRangeParams(TextStart, TextLength: Integer; ModifyMask: TTextModifyMask;
const FontName: String; FontSize: Integer; FontColor: TColor; AddFontStyle, RemoveFontStyle: TFontStyles);
procedure SetRangeParaParams(TextStart, TextLength: INteger; ModifyMask: TParaModifyMask;
const ParaMetric: TParaMetric);
function LoadRichText(Source: TStream): Boolean; virtual;
function SaveRichText(Dest: TStream): Boolean; virtual;
@ -458,6 +461,31 @@ begin
end;
end;
procedure TCustomRichMemo.SetRangeParaParams(TextStart, TextLength: INteger;
ModifyMask: TParaModifyMask; const ParaMetric: TParaMetric);
var
i : integer;
st, ln: Integer;
m : TParaMetric;
begin
repeat
GetParaRange(TextStart, TextStart, ln);
GetParaMetric(TextStart, m);
if pmm_FirstLine in ModifyMask then m.FirstLine:=ParaMetric.FirstLine;
if pmm_HeadIndent in ModifyMask then m.HeadIndent:=ParaMetric.HeadIndent;
if pmm_TailIndent in ModifyMask then m.TailIndent:=ParaMetric.TailIndent;
if pmm_SpaceBefore in ModifyMask then m.SpaceBefore:=ParaMetric.SpaceBefore;
if pmm_SpaceAfter in ModifyMask then m.SpaceAfter:=ParaMetric.SpaceAfter;
if pmm_LineSpacing in ModifyMask then m.LineSpacing:=ParaMetric.LineSpacing;
SetParaMetric(TextStart, 1, m);
inc(TextStart, ln);
dec(TextLength, ln);
until TextLength<=0;
end;
function TCustomRichMemo.LoadRichText(Source: TStream): Boolean;
begin
Result:=false;

View File

@ -20,8 +20,8 @@ object Form1: TForm1
end
object RichMemo1: TRichMemo
Left = 8
Height = 280
Top = 48
Height = 224
Top = 104
Width = 599
Anchors = [akTop, akLeft, akRight, akBottom]
HideSelection = False
@ -187,6 +187,57 @@ object Form1: TForm1
GroupIndex = 1
OnClick = btnJAClick
end
object edtFL: TSpinEdit
Left = 72
Height = 21
Top = 48
Width = 88
MaxValue = 1000
OnChange = edtFLChange
TabOrder = 3
end
object edtHI: TSpinEdit
Left = 72
Height = 21
Top = 72
Width = 88
MaxValue = 1000
OnChange = edtHIChange
TabOrder = 4
end
object edtTI: TSpinEdit
Left = 240
Height = 21
Top = 48
Width = 88
MaxValue = 1000
OnChange = edtTIChange
TabOrder = 5
end
object Label1: TLabel
Left = 8
Height = 13
Top = 48
Width = 43
Caption = 'First Line'
ParentColor = False
end
object Label2: TLabel
Left = 8
Height = 13
Top = 72
Width = 32
Caption = 'Indent'
ParentColor = False
end
object Label3: TLabel
Left = 176
Height = 13
Top = 48
Width = 51
Caption = 'Tail Indent'
ParentColor = False
end
object OpenDialog1: TOpenDialog
left = 488
top = 16

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Buttons, ComCtrls, RichMemo, RichMemoUtils, Win32RichMemo;
Buttons, ComCtrls, Spin, RichMemo, RichMemoUtils;
type
@ -16,12 +16,18 @@ type
Button1: TButton;
Button2: TButton;
ImageList1: TImageList;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
OpenDialog1: TOpenDialog;
RichMemo1: TRichMemo;
btnLA: TSpeedButton;
btnCA: TSpeedButton;
btnRA: TSpeedButton;
btnJA: TSpeedButton;
edtFL: TSpinEdit;
edtHI: TSpinEdit;
edtTI: TSpinEdit;
procedure btnCAClick(Sender: TObject);
procedure btnJAClick(Sender: TObject);
procedure btnLAClick(Sender: TObject);
@ -29,6 +35,9 @@ type
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure edtFLChange(Sender: TObject);
procedure edtHIChange(Sender: TObject);
procedure edtTIChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RichMemo1Click(Sender: TObject);
procedure RichMemo1KeyDown(Sender: TObject; var Key: Word;
@ -92,6 +101,36 @@ procedure TForm1.Button3Click(Sender: TObject);
begin
end;
procedure TForm1.edtFLChange(Sender: TObject);
var
m : TParaMetric;
begin
InitParaMetric(m);
m.FirstLine:=edtFL.Value;
RichMemo1.SetRangeParaParams(RichMemo1.SelStart, RichMemo1.SelLength,
[pmm_FirstLine], m);
end;
procedure TForm1.edtHIChange(Sender: TObject);
var
m :TParaMetric;
begin
InitParaMetric(m);
m.HeadIndent:=edtHI.Value;
RichMemo1.SetRangeParaParams(RichMemo1.SelStart, RichMemo1.SelLength,
[pmm_HeadIndent], m);
end;
procedure TForm1.edtTIChange(Sender: TObject);
var
m :TParaMetric;
begin
InitParaMetric(m);
m.TailIndent:=edtTI.Value;
RichMemo1.SetRangeParaParams(RichMemo1.SelStart, RichMemo1.SelLength,
[pmm_TailIndent], m);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
SelectionChanged;
@ -111,6 +150,7 @@ end;
procedure TForm1.SelectionChanged;
var
pa : TParaAlignment;
m : TParaMetric;
begin
pa:=RichMemo1.GetParaAlignment(RichMemo1.SelStart);
case pa of
@ -119,6 +159,16 @@ begin
paCenter: btnCA.Down:=true;
paJustify: btnJA.Down:=true;
end;
edtFL.OnChange:=nil;
edtHI.OnChange:=nil;
edtTI.OnChange:=nil;
RichMemo1.GetParaMetric(RichMemo1.SelStart, m);
edtFL.Value:=round(m.FirstLine);
edtHI.Value:=round(m.HeadIndent);
edtTI.Value:=round(m.TailIndent);
edtFL.OnChange:=@edtFLChange;
edtHI.OnChange:=@edtHIChange;
edtTI.OnChange:=@edtTIChange;
end;
procedure TForm1.SetRichAlign(a: TParaAlignment);