在一个窗体上放置一个RichEdit控件,
在RichEdit上放置有TLabel,TEdit,以及图片等
现在想打印整个页面,也就是RichEdit上的所有控件内容(控件,文本,图形)procedure TMainForml.FilePrint(Sender: TObject);
var DistanceLine,Line:integer;
begin
  if PrintDialog.Execute then
  begin
    Printer.Canvas.Font:=FormNew.RichEditNew.Font;
    DistanceLine:=Trunc(1.5*FontDialog.Font.Size);
    Printer.BeginDoc;
    for Line:=0 to FormNew.RichEditNew.Lines.Count-1 do
begin
//    FormNew.PrintScale:=poPrintToFit;
//    FormNew.Print;
    Printer.Canvas.TextOut(0,DistanceLine*Line,FormNew.RichEditNew.Lines[line]);
    Printer.Canvas.Draw(0,0,FormPic.AJpg.Picture.Graphic);
    end;
    Printer.EndDoc;
  end;
end;上面注释掉的2行是看书上说的可以直接打印整个窗体的函数,但是好像不行啊??
(PB里面有可以直接打印窗体的函数,无论窗体里放置什么控件,直接调用函数就可以
打印,是吧?)
上面的过程里顺序打印文本和图片感觉是不对的,但是不知道该如何做?可不可以把文本
和图形一同视为图形打印呢?请教大家!!

解决方案 »

  1.   

    TForm.Print是可以打印的,但不能打印TForm上的控件。看来你对Delphi的VCL很不了解。
    其实,Print与显示在屏幕上,最大的区别在于Canvas是哪个?默认的TForm、TRichEdit等所有的Canvas都是指的屏幕。如果你要打印,则只需要改变他们的Canvas := Printer.Canvas就可以了。
      

  2.   

    我写成这样:
        FormNew.Canvas:=Printer.Canvas;
    编译通不过,说不能赋值给只读的属性,什么原因呢?