📄 pararvfrm.pas
字号:
{*******************************************************}
{ }
{ RichViewActions }
{ Dialog for paragraph attributes }
{ }
{ Copyright (c) Sergey Tkachenko }
{ svt@trichview.com }
{ http://www.trichview.com }
{ }
{*******************************************************}
unit ParaRVFrm;
interface
{$I RichViewActions.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RVOfficeRadioBtn, ImgList, RVScroll, RVClasses,
{$IFDEF USERVKSDEVTE}
te_controls, te_extctrls,
{$ENDIF}
{$IFDEF USERVTNT}
TntComCtrls,
{$ENDIF}
RichView, RVStyle, BaseRVFrm, RVSpinEdit, ExtCtrls, RVALocalize, ComCtrls;
type
TfrmRVPara = class(TfrmRVBase)
btnOk: TButton;
btnCancel: TButton;
pc: TPageControl;
ts1: TTabSheet;
ts2: TTabSheet;
ts3: TTabSheet;
gbAlignment: TRVOfficeRadioGroup;
gbIndents: TGroupBox;
lblLeft: TLabel;
lblRight: TLabel;
lblFirstLine: TLabel;
Bevel1: TBevel;
seLeftIndent: TRVSpinEdit;
seRightIndent: TRVSpinEdit;
rbNegative: TRVOfficeRadioButton;
rbPositive: TRVOfficeRadioButton;
seFirstLineIndent: TRVSpinEdit;
gbSpacing: TGroupBox;
lblBefore: TLabel;
lblAfter: TLabel;
lblLineSpacing: TLabel;
Bevel3: TBevel;
lblBy: TLabel;
seSpaceBefore: TRVSpinEdit;
seSpaceAfter: TRVSpinEdit;
seLineSpacingValue: TRVSpinEdit;
cmbLineSpacing: TComboBox;
gbSample: TGroupBox;
rv: TRichView;
ImageList1: TImageList;
rvs: TRVStyle;
gbPagination: TGroupBox;
cbKeepLinesTogether: TCheckBox;
cbKeepWithNext: TCheckBox;
ilSmallTabs: TImageList;
ilTabs: TImageList;
lstTabs: TListBox;
btnDelete: TButton;
btnDeleteAll: TButton;
rgTabAlign: TRVOfficeRadioGroup;
rgLeader: TRadioGroup;
seTabPos: TRVSpinEdit;
lblTabPos: TLabel;
btnSet: TButton;
lblDelTabs: TLabel;
lblDelTabList: TLabel;
ilListTabs: TImageList;
procedure FormCreate(Sender: TObject);
procedure seFirstLineIndentChange(Sender: TObject);
procedure cmbLineSpacingClick(Sender: TObject);
procedure seLineSpacingValueChange(Sender: TObject);
procedure seChange(Sender: TObject);
procedure gbAlignmentClick(Sender: TObject);
procedure gbAlignmentDblClickItem(Sender: TObject);
procedure rbFLClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure seLeftIndentChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure lstTabsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure lstTabsClick(Sender: TObject);
procedure seTabPosChange(Sender: TObject);
procedure btnDeleteAllClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnSetClick(Sender: TObject);
private
{ Private declarations }
_lstTabs, _rgLeader, _lblDelTabList: TControl;
_btnSet, _btnDelete, _btnDeleteAll: TControl;
_ts2: TControl;
IgnoreChanges: Boolean;
FDeleteAllTabs: Boolean;
FTabsToDelete: TRVIntegerList;
FTabs: TRVTabInfos;
DoNotResetLeader: Boolean;
procedure UpdateSample;
procedure SetTabs(Value: TRVTabInfos);
procedure UpdateTabList(NewIndex: Integer);
procedure DrawTabItem(Canvas: TCanvas; Index: Integer; R: TRect; Selected: Boolean);
procedure UpdateDelTabList;
protected
{$IFDEF RVASKINNED}
procedure OnCreateThemedControl(OldControl, NewControl: TControl); override;
{$ENDIF}
public
{ Public declarations }
_cmbLineSpacing, _cbKeepWithNext, _cbKeepLinesTogether: TControl;
TabsModified: Boolean;
procedure Localize; override;
procedure HideTabsPage;
property DeleteAllTabs: Boolean read FDeleteAllTabs write FDeleteAllTabs;
property TabsToDelete: TRVIntegerList read FTabsToDelete;
property Tabs: TRVTabInfos read FTabs write SetTabs;
end;
var
frmRVPara: TfrmRVPara;
implementation
{$R *.dfm}
procedure TfrmRVPara.FormCreate(Sender: TObject);
var h: Integer;
begin
Canvas.Font := lstTabs.Font;
h := Canvas.TextHeight('Wg')+4;
if h<20 then
h := 20;
lstTabs.ItemHeight := h;
_cmbLineSpacing := cmbLineSpacing;
_cbKeepWithNext := cbKeepWithNext;
_cbKeepLinesTogether := cbKeepLinesTogether;
_lstTabs := lstTabs;
_rgLeader := rgLeader;
_btnSet := btnSet;
_btnDelete := btnDelete;
_btnDeleteAll := btnDeleteAll;
_lblDelTabList := lblDelTabList;
_ts2 := ts2;
rgLeader.Items[4] := #$B7#$B7#$B7#$B7#$B7#$B7#$B7#$B7#$B7#$B7;
inherited;
rv.AddNL(RVA_GetS(rvam_par_Preview), 0, 0);
rv.AddNL(RVA_GetS(rvam_par_Preview), 1, 1);
rv.AddNL(RVA_GetS(rvam_par_Preview), 0, 0);
rv.Format;
FTabsToDelete := TRVIntegerList.Create;
FTabs := TRVTabInfos.Create(nil);
end;
procedure TfrmRVPara.FormDestroy(Sender: TObject);
begin
FTabsToDelete.Free;
FTabs.Free;
inherited;
end;
procedure TfrmRVPara.seFirstLineIndentChange(Sender: TObject);
begin
if not Visible or IgnoreChanges then
exit;
if seFirstLineIndent.Indeterminate or (seFirstLineIndent.AsInteger=0) then begin
rbNegative.Checked := False;
rbPositive.Checked := False;
end
else if not seFirstLineIndent.Indeterminate and not rbNegative.Checked and not rbPositive.Checked then
rbPositive.Checked := True
else if rbNegative.Checked and
(seLeftIndent.AsInteger-seFirstLineIndent.AsInteger-Round(seLeftIndent.MinValue)<0) then begin
IgnoreChanges := True;
seLeftIndent.Value := seFirstLineIndent.AsInteger+Round(seLeftIndent.MinValue);
IgnoreChanges := False;
end;
UpdateSample;
end;
procedure TfrmRVPara.seLeftIndentChange(Sender: TObject);
begin
if not Visible or IgnoreChanges then
exit;
if rbNegative.Checked and (seFirstLineIndent.Value>0) and
(seLeftIndent.AsInteger-seFirstLineIndent.AsInteger-Round(seLeftIndent.MinValue)<0) then begin
IgnoreChanges := True;
seFirstLineIndent.Value := seLeftIndent.AsInteger-Round(seLeftIndent.MinValue);
IgnoreChanges := False;
end;
UpdateSample;
end;
procedure TfrmRVPara.rbFLClick(Sender: TObject);
begin
if not Visible then
exit;
if rbNegative.Checked and
(seLeftIndent.AsInteger-seFirstLineIndent.AsInteger-Round(seLeftIndent.MinValue)<0) then begin
IgnoreChanges := True;
seLeftIndent.Value := seFirstLineIndent.AsInteger+Round(seLeftIndent.MinValue);
IgnoreChanges := False;
end;
if seFirstLineIndent.Indeterminate then
seFirstLineIndent.Value := 0;
UpdateSample;
end;
procedure TfrmRVPara.cmbLineSpacingClick(Sender: TObject);
begin
if not Visible then
exit;
if GetXBoxItemIndex(_cmbLineSpacing)<>3 then
seLineSpacingValue.Indeterminate := True
else if seLineSpacingValue.Indeterminate then
seLineSpacingValue.Value := 3;
UpdateSample;
end;
procedure TfrmRVPara.seLineSpacingValueChange(Sender: TObject);
begin
if not Visible then
exit;
if not seLineSpacingValue.Indeterminate then
SetXBoxItemIndex(_cmbLineSpacing, 3);
UpdateSample;
end;
procedure TfrmRVPara.gbAlignmentClick(Sender: TObject);
begin
UpdateSample;
end;
procedure TfrmRVPara.UpdateSample;
begin
if not Visible then
exit;
with rvs.ParaStyles[1] do begin
if gbAlignment.ItemIndex<0 then
Alignment := rvaLeft
else
Alignment := TRVAlignment(gbAlignment.ItemIndex);
SpaceBefore := seSpaceBefore.AsInteger div 2;
SpaceAfter := seSpaceAfter.AsInteger div 2;
Background.BorderOffsets.Top := SpaceBefore;
Background.BorderOffsets.Bottom := SpaceAfter;
LeftIndent := seLeftIndent.AsInteger div 2;
RightIndent := seRightIndent.AsInteger div 2;
if rbNegative.Checked then
FirstIndent := -seFirstLineIndent.AsInteger div 2
else
FirstIndent := seFirstLineIndent.AsInteger div 2;
case GetXBoxItemIndex(_cmbLineSpacing) of
0: LineSpacing := 100;
1: LineSpacing := 150;
2: LineSpacing := 200;
3: LineSpacing := Round(seLineSpacingValue.Value * 100);
end;
end;
rv.Format;
end;
procedure TfrmRVPara.seChange(Sender: TObject);
begin
UpdateSample;
end;
procedure TfrmRVPara.gbAlignmentDblClickItem(Sender: TObject);
begin
ModalResult := mrOk;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -