Delphi 打印Memo里面的内容 实现的功能和记事本的打印的功能一样
打印保存为文件时此时的文件名如何设置?
当Memo里的文本数量巨大时 窗体正在打印会出现点数字显示问题 闪烁
PageSetup没做任何功能
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; PrinterSetupDialog1: TPrinterSetupDialog; Button2: TButton; PrinterSetupDialog2: TPrinterSetupDialog; PrintDialog2: TPrintDialog; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses printers, Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin PrinterSetupDialog1.Execute; //选择输出的打印机以及其他打印控制选项 end; procedure MemoPrinter(Memo:TMemo;TitleStr: string = '无标题'); var Left:Integer; Top:Integer; i,j,x,y : integer; //PageHeight, PagesStr: String; posX,posY,Posx1,posY1:Integer; PrintDialog1:TPrintDialog; begin Left := 500; Top := 800; y := Top; // 40 x := Left; // 80 j:=1; PrintDialog1 :=TPrintDialog.Create(Application); if PrintDialog1.Execute then With Printer do begin BeginDoc; // 另存的打印的文件名 如何实现 默认为 .jnt Form2.Show; Canvas.Font :=Memo.Font; //------------------------------------------------------------------------- //打印文件名的标题 // TitleStr:='无标题'; posx :=(PageWidth div 2) - Length(TitleStr) * 50 ; //x+1800; posy := (PageHeight * 6) div 100; //第N页的标题 PagesStr :=Format( '第 %d 页',[Printer.PageNumber]); posX1 :=(PageWidth div 2) - Length(PagesStr) * 50; posY1 :=(PageHeight * 92) div 100; //------------------------------------------------------------------------- for i := 0 to Memo.Lines.Count - 1 do begin Canvas.TextOut(x,y,Memo.Lines[i]); //TextOut(Left,Top,string); y := y + Memo.Font.Size * 10; //Memo.Font.Size*10为行间距 第1行与第2行的间距,2和3,3与4,... if(y > PageHeight - Top) then begin Canvas.TextOut(posx,posy,TitleStr); for j := 1 to Printer.PageNumber do begin PagesStr := Format( '第 %d 页',[j]); Canvas.TextOut(posX1,posY1,PagesStr); Application.ProcessMessages; Form2.Label1.Caption :=System.Concat( ' 正在打印',# 13# 10,TitleStr,# 13# 10,Format( '第 %d 页',[j])); if Form2.Tag = 1 then begin Abort; Exit; end; end; NewPage; y := Top; end; end; Canvas.TextOut( posX, posY, TitleStr ); Canvas.TextOut( posX1,posY1,Format( '第 %d 页',[j]) ); Form2.Close; Form1.Label1.Caption :=System.Concat( ' 正在打印',# 13# 10,TitleStr,# 13# 10,Format( '第 %d 页',[j])); EndDoc; // Form1.Caption:= Format('x = %d y = %d Width = %d Height = %d ',[x,y,PageWidth,Pageheight]); end; end; procedure TForm1.Button2Click(Sender: TObject); begin MemoPrinter(Memo1, 'Hello Roman'); end; end.
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm2 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} uses Unit1; procedure TForm2.Button1Click(Sender: TObject); begin Tag := 1; Close; end; end.
附件列表