ScaleRichView怎么在文本编辑器里绘制行号

作者:控件中国网   出处:控件中国网   2015-11-25 14:27:35   阅读:8

ScaleRichView是一系列所见所得的编辑器,基于TRichView和RichViewActions创建,使用TRichView引擎来呈现文档,支持几乎所有TRichView功能,可以所见所得的编辑文档,该产品是作为TRichView的一个添加模块,要使用该产品必须要先安装TRichView 和RichViewActions,这篇文章主要介绍怎么在ScaleRichView的OnPaintPage事件里绘制行号,当使用新的一页时行号也会重新开始,具体参考下面的代码:
line-numbers.png
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;
Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat