如何做一个自定义打印的 《预览》 -- 对我是高难度的挑战!!(100分)

测试做了一个,也不难吗!!
type
TfrmPrintView = class(TForm)
btnPrint: TButton;
procedure btnPrintClick(Sender: TObject);
private
{ Private declarations }
M_RateX,M_RateY:Integer;
FCanvas:TCanvas;
FPrintForm:TForm;
procedure SetFont;
procedure PrintPaint(Sender: TObject);
procedure PrintText(const Preview:Boolean);
public
{ Public declarations }
end;

var
frmPrintView: TfrmPrintView;
implementation
uses Printers;
{$R *.DFM}
procedure TfrmPrintView.SetFont;
begin
//在以毫米为单位的位置(30,40)开始打印一行字
FCanvas.Font.Style:=[];
FCanvas.Font.Size :=10;
FCanvas.Font.Name :='宋体';
end;

procedure TfrmPrintView.PrintPaint(Sender: TObject);
begin
FCanvas.TextOut(30*M_Ratex,40*M_RateY,'测试打印内容!');
//画以毫米为单位的线,从(10,10)到(110,10)
FCanvas.Pen.Width :=1;
FCanvas.MoveTo(10*M_Ratex,10*M_Ratey);
FCanvas.LineTo(110*M_Ratex,10*M_Ratey) ;
end;

//以下是我直接在打印机里打 印内容的简单思路,实现了直接向打印机发送线或文本
procedure TfrmPrintView.PrintText(const Preview:Boolean);
begin
// 水平每毫米象素数, float
if Preview then
try
FPrintForm:=TForm.Create(Application);
FCanvas:=FPrintForm.Canvas;
with FPrintFormdo
begin
M_RateX:=0;//PixelsPerInch;///GetDeviceCaps(printer.Handle,HORZSIZE);
//铅直每毫米象素数, float
M_RateY:=0;//PixelsPerInch;///GetDeviceCaps(printer.Handle,VERTSIZE);
BorderStyle:=bsSingle;
BorderIcons:=[biSystemMenu];
Position:=poMainFormCenter;
OnPaint:=PrintPaint;
ShowModal;
end;
finally
FreeAndNil(FPrintForm);
FCanvas:=nil;
end else
with Printerdo
begin
M_RateX:=GetDeviceCaps(Handle,HORZRES);///GetDeviceCaps(printer.Handle,HORZSIZE);
//铅直每毫米象素数, float
M_RateY:=GetDeviceCaps(Handle,VERTRES);///GetDeviceCaps(printer.Handle,VERTSIZE);
//在以毫米为单位的位置(30,40)开始打印一行字
Canvas.Font.Style:=[];
Canvas.Font.Size :=10;
Canvas.Font.Name :='宋体';
Canvas.TextOut(30*M_Ratex,40*M_RateY,'测试打印内容!');
//画以毫米为单位的线,从(10,10)到(110,10)
Canvas.Pen.Width :=1;
Canvas.MoveTo(10*M_Ratex,10*M_Ratey);
Canvas.LineTo(110*M_Ratex,10*M_Ratey) ;
end;
end;

procedure TfrmPrintView.btnPrintClick(Sender: TObject);
begin
PrintText(True);
end;

end.
 
以前,我坐一个很挑剔的报表,没有办法了
就自己利用dreamweaver画了一个网页模板
利用程序向里面灌数据
在利用IE的打印和打印预览来看
 
强烈建议选用第三方控件,用Grid++Report(http://www.rubylong.cn)也许就是正确的选择。
 
我自己搞了一个
代码和文件在我的网络硬盘。
 
http://delhpi.ys168.com
来自:dzl19, 时间:2006-12-11 12:41:59, ID:3642693
自己顶
===========
你不是要打印银行票据吗,软件我做好了,打印预览也实现了。你有的功能需求没有多大意义。
 
自己顶+
 
自己顶+ 自己顶+
 
学习
顶!
 
你的软件和我的差不多。
我需要的打印预览已经完成了。就是从这个帖子上面的回复学习的,我需要的比较简单。
你要的太复杂。
 
代码贴出来,这里主要是学习的地方。
 
对,这里是学习的地方,所以我看了
来自:lccc, 时间:2006-12-2 19:44:16, ID:3637833
的帖子代码后,认真学习了一下(如果不认真学习,对不起lccc),还将lccc的代码打印出来仔细学习。经过认真学习,终于明白了一点点,并完成了自己需要的打印预览。
 

Similar threads

I
回复
0
查看
2K
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部