如何打印RichEdit的内容?

时间:2014-03-06 19:44:16

标签: delphi delphi-7

我做了一个小程序,你输入一堆东西然后把它放到一个丰富的编辑中,但现在我将如何打印丰富的编辑内容?

我在考虑RichEdit1.print();,但我不知道在括号中放什么。富编辑有6个不同的边距(每个不同的项目2(名称,数量和价格))

如果有人愿意提供帮助,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

传递一个参数,一个包含打印作业名称的字符串。如果要相信documentation,此名称将显示在打印管理器中:

  

使用“打印”打印丰富的编辑控件的内容。 Caption参数指定出现在打印管理器和网络标题页上的标题。

您还需要在打印前设置PageRect。这定义了打印机上的页面尺寸。您需要查询所选打印机的设备功能,并应用任何边距。我使用这个辅助函数来做到这一点:

procedure PrintRichEdit(RichEdit: TRichEdit; const Caption: string; 
  const PrinterMargin: Integer);
//the units of TRichEdit.PageRect are pixels, units of PrinterMargin are mm
var
  PrinterHeight, PrinterWidth: Integer;
  LogPixels, PrinterTopLeft: TPoint;
  PageRect: TRect;
  Handle: HDC;
begin
  Handle := Printer.Handle;
  LogPixels := Point(GetDeviceCaps(Handle, LOGPIXELSX),
    GetDeviceCaps(Handle, LOGPIXELSY));
  PrinterTopLeft := Point(GetDeviceCaps(Handle, PHYSICALOFFSETX), 
    GetDeviceCaps(Handle, PHYSICALOFFSETY));
  PrinterWidth := Printer.PageWidth;
  PrinterHeight := Printer.PageHeight;
  PageRect.Left := Max(0, Round(PrinterMargin*LogPixels.X/25.4)
    - PrinterTopLeft.X);
  PageRect.Top := Max(0, Round(PrinterMargin*LogPixels.Y/25.4)
    - PrinterTopLeft.Y);
  PageRect.Right := PrinterWidth-PageRect.Left;
  PageRect.Bottom := PrinterHeight-PageRect.Top;
  if (PageRect.Left>=PageRect.Right) or (PageRect.Top>=PageRect.Bottom) then
    //the margins are too big
    PageRect := Rect(0, 0, 0, 0);
  RichEdit.PageRect := PageRect;
  RichEdit.Print(Caption);
end;