在一个窗体上放置一个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里面有可以直接打印窗体的函数,无论窗体里放置什么控件,直接调用函数就可以
打印,是吧?)
上面的过程里顺序打印文本和图片感觉是不对的,但是不知道该如何做?可不可以把文本
和图形一同视为图形打印呢?请教大家!!
在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里面有可以直接打印窗体的函数,无论窗体里放置什么控件,直接调用函数就可以
打印,是吧?)
上面的过程里顺序打印文本和图片感觉是不对的,但是不知道该如何做?可不可以把文本
和图形一同视为图形打印呢?请教大家!!
其实,Print与显示在屏幕上,最大的区别在于Canvas是哪个?默认的TForm、TRichEdit等所有的Canvas都是指的屏幕。如果你要打印,则只需要改变他们的Canvas := Printer.Canvas就可以了。
FormNew.Canvas:=Printer.Canvas;
编译通不过,说不能赋值给只读的属性,什么原因呢?