使用TPrinter组件,运行属性begin
Doc方法启动一个打印报表工作,然后利用Canvas属性
将文字或图形输入内存缓冲区内,最后运行EndDoc方法结束。也就是说将内存缓冲区内的
数据传输到打印机打印出来。下面是为你提供的范例,请先将Memo的Visible属性设为True.
选择文本文件的操作是使用OpenDialog组件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
Label1: TLabel;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FName: String;
implementation
uses Printers;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (OpenDialog1.Execute=True) then
begin
Fname:=OpenDialog1.FileName;
Label1.Caption:='准备打印 '+Fname;
Button2.Enabled:=True;
end else
Button2.Enabled:=False;
end;
procedure TForm1.Button2Click(Sender: TObject);
var PageNum:String;
Ctr,i,PHeight,LineSpace,x:Integer;
begin
Printer.begin
Doc;
// 启动一个新的打印工作
x:=0;
// 打印的 x 坐标
Ctr:=1;
// 计算打印行数的变量
PHeight:=Printer.PageHeight;
LineSpace:=PHeight div 60;
PageNum:=IntToStr(Printer.PageNumber);
Label1.Caption:='现在正在打印第'+PageNum+'页数据.....';
Memo1.Lines.LoadFromFile(Fname);
// 读取打印的文本文件
// 把文本文件一行一行打印出来
for i:=0 to Memo1.Lines.Count-1do
begin
Printer.Canvas.TextOut(0,x,Memo1.Lines);
x:=x+LineSpace;
Ctr:=Ctr+1;
if (Ctr > 59) then
begin
// 如果超过60行就跳页
Printer.NewPage;
// 送出跳页控制码
x:=0;
Ctr:=0;
PageNum:=IntToStr(Printer.PageNumber);
Label1.Caption:='现在正在打印第'+PageNum+'页数据.....';
end
end;
Printer.EndDoc;
Label1.Caption:='打印完成!一共打印了'+PageNum+'页。';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.