我们知道 RichEdit 是M$提供的标准控件,delphi的vcl里面是很老的版本,而rxlib的有最新的4.1的封装
但是bug很多 ,比如查找替换 ,中文支持,打印等等,下面代码就是解决的打印问题,来自国外某网站,
自己根据情况,有调整
Why? ---为什么使用这个高版本呢?这个版本的RTF控件,支持插入表格(当然是用接口罗),支持从word粘贴表格
不变形,插入图片很方便,那么还有什么理由拒绝呢?
代码
//
打印rxrichedit
// 可以设置左边,上边距,单位inch
// eg:
// printrxrichedit(editor, 0.5 , 0.5 );
unit uPrintRxRichEdit;
interface
uses Windows,messages,RxRichEd ,RichEdit,printers,math;
type
TPageOffset = record
mStart,
mEnd: Integer;
rendRect: TRect;
end ;
// 打印rxrichedit
function printRxRichEdit(editor:TRxRichEdit;leftoffset,topoffset:double):integer;
implementation
// 打印rxrichedit ,返回值是页数
function printRxRichEdit(editor:TRxRichEdit;leftoffset,topoffset:double):integer;
var
wPage, hPage, xPPI, yPPI, wTwips, hTwips: integer;
pageRect, rendRect: TRect;
po: TPageOffset;
fr: TFormatRange;
lastOffset, currPage, pageCount: integer;
xOffset, yOffset: integer;
FPageOffsets: array of TPageOffset;
TextLenEx: TGetTextLengthEx;
firstPage: boolean;
begin
// First, get the size of a printed page in printer device units
wPage : = GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
hPage : = GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
// Next, get the device units per inch for the printer
xPPI : = GetDeviceCaps(Printer.Handle, LOGPIXELSX);
yPPI : = GetDeviceCaps(Printer.Handle, LOGPIXELSY);
// Convert the page size from device units to twips
wTwips : = MulDiv(wPage, 1440 , xPPI);
hTwips : = MulDiv(hPage, 1440 , yPPI);
// Save the page size in twips
with pageRect do
begin
Left : = 0 ;
Top : = 0 ;
Right : = wTwips;
Bottom : = hTwi
// 可以设置左边,上边距,单位inch
// eg:
// printrxrichedit(editor, 0.5 , 0.5 );
unit uPrintRxRichEdit;
interface
uses Windows,messages,RxRichEd ,RichEdit,printers,math;
type
TPageOffset = record
mStart,
mEnd: Integer;
rendRect: TRect;
end ;
// 打印rxrichedit
function printRxRichEdit(editor:TRxRichEdit;leftoffset,topoffset:double):integer;
implementation
// 打印rxrichedit ,返回值是页数
function printRxRichEdit(editor:TRxRichEdit;leftoffset,topoffset:double):integer;
var
wPage, hPage, xPPI, yPPI, wTwips, hTwips: integer;
pageRect, rendRect: TRect;
po: TPageOffset;
fr: TFormatRange;
lastOffset, currPage, pageCount: integer;
xOffset, yOffset: integer;
FPageOffsets: array of TPageOffset;
TextLenEx: TGetTextLengthEx;
firstPage: boolean;
begin
// First, get the size of a printed page in printer device units
wPage : = GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
hPage : = GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
// Next, get the device units per inch for the printer
xPPI : = GetDeviceCaps(Printer.Handle, LOGPIXELSX);
yPPI : = GetDeviceCaps(Printer.Handle, LOGPIXELSY);
// Convert the page size from device units to twips
wTwips : = MulDiv(wPage, 1440 , xPPI);
hTwips : = MulDiv(hPage, 1440 , yPPI);
// Save the page size in twips
with pageRect do
begin
Left : = 0 ;
Top : = 0 ;
Right : = wTwips;
Bottom : = hTwi