ScaleRichView是一系列所见所得的编辑器,基于
TRichView和RichViewActions创建,使用
TRichView引擎来呈现文档,支持几乎所有
TRichView功能,可以所见所得的编辑文档,该产品是作为
TRichView的一个添加模块,要使用该产品必须要先安装
TRichView 和RichViewActions,这篇文章主要介绍怎么在ScaleRichView的OnPaintPage事件里绘制行号,当使用新的一页时行号也会重新开始,具体参考下面的代码:
procedure TForm1.SRichViewEdit1PaintPage(Sender: TObject; PageNo: Integer;
PageRect, R: TRect; Canvas: TCanvas; Prepaint, Printing: Boolean);
const
PageNumberDX = 5; // distance between line numbers and text
var
i: Integer;
FirstItemNo, LastItemNo, Offs, ItemPart: Integer;
FirstPageNo, LastPageNo : Integer;
ItemRect: TRect;
srv: TSRichViewEdit;
TextHeight, LineNumber, Left, Top, LeftMargin: Integer;
begin
// line number font
Canvas.Font.Name := 'Tahoma';
Canvas.Font.Size := 6;
Canvas.Font.Style := [];
Canvas.Font.Color := clBtnShadow;
Canvas.Brush.Style := bsClear;
TextHeight := Canvas.TextHeight('0');
srv := Sender as TSRichViewEdit;
srv.GetPageStartItemNo(PageNo, FirstItemNo, Offs);
srv.GetPageLastItemNo(PageNo, LastItemNo, Offs);
LineNumber := 1;
LeftMargin := srv.GetLeftMargin100Pix(PageNo);
for i := FirstItemNo to LastItemNo do begin
if srv.RichViewEdit.GetItemStyle(i)=rvsTable then
continue;
ItemPart := 0;
while srv.GetItemBounds100(
srv.RichViewEdit.RVData, i, ItemRect,
FirstPageNo, LastPageNo, ItemPart) do begin
if (FirstPageNo = PageNo) and
((ItemPart>0) or srv.RichViewEdit.IsFromNewLine(i)) then begin
Left := PageRect.Left + LeftMargin - PageNumberDX -
Canvas.TextWidth(IntToStr(LineNumber));
Top := PageRect.Top + (ItemRect.Top+ItemRect.Bottom - TextHeight) div 2;
Canvas.TextOut(Left, Top, IntToStr(LineNumber));
inc(LineNumber);
end;
inc(ItemPart);
end;
end;
end;