从<<delphi5编程实例>>上摘的,慢慢看吧,@_@ 6) 在F o r m 1的i n t e r f a c e部分的u s e s语句中将P r i n t e r s包含进去: i n t e r f a c e u s e s Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,Printers; . . . 7) 在U n i t 1 . p a s文件的T F o r m 1类型定义处,添加下面的变量: t y p e TForm1 = class(TForm) . . . p u b l i c { Public declarations } ZoomScale: Integer; // 打印时放大的比例 PreviewScale:Integer; // 预览时缩小的比例 L e f t M a r g i n , TopMargin: Integer; // 左边距和上边距 e n d ; 8) 在U n i t 2 . p a s文件的T F o r m 2类型定义处,添加下面的变量: t y p e TForm2 = class(TForm) . . . p u b l i c { Public declarations } P a g e Width,PageHeight:Integer; // 预览区域页面的宽度和高度 e n d ; 9) 在F o r m 1中添加F o r m 1窗体的O n C r e a t e事件、B u t t o n 1组件(打印预览)的O n C l i c k事件和 B u t t o n 2组件(打印)的O n C l i c k事件的处理过程如下: procedure TForm1.Form1Create(Sender: TO b j e c t ) ; b e g i n I m a g e 1 . P i c t u r e . L o a d F r o m F i l e ( ' Tr e e . b m p ' ) ; // 装入位图文件 e n d ; procedure TForm1.Button1Click(Sender: TO b j e c t ) ; 下载 v a r P P I X , P P I Y:Integer; // X方向和Y方向打印机每英寸的点数 b e g i n PreviewScale := StrTo I n t ( E d i t 3 . Te x t ) ; // 预览显示比例 Z o o m S c a l e : = S t r To I n t ( E d i t 4 . Te x t ) ; // 获取打印机每英寸的点数 P P I X : = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S X ) ; P P I Y: = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S Y ) ; // 1英寸= 2 . 5 4厘米 // 计算左边距和上边距 L e f t M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 1 . Te x t ) / 2 . 5 4*PPIX) div PreviewScale; To p M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 2 . Te x t ) / 2 . 5 4*PPIY) div PreviewScale; // 计算页面大小 if RadioGroup1.ItemIndex = 0 then b e g i n F o r m 2 . P a g e Wi d t h : = Tr u n c ( 2 1 . 0 / 2 . 5 4*PPIX) div PreviewScale; F o r m 2 . P a g e H e i g h t : = Tr u n c ( 2 9 . 7 / 2 . 5 4*PPIY) div PreviewScale; e n d e l s e b e g i n F o r m 2 . P a g e Wi d t h : = Tr u n c ( 1 8 . 4 / 2 . 5 4*PPIX) div PreviewScale; F o r m 2 . P a g e H e i g h t : = Tr u n c ( 2 6 . 0 / 2 . 5 4*PPIY) div PreviewScale; e n d ; // 显示预览窗口 F o r m 2 . S h o w ; e n d ; procedure TForm1.Button2Click(Sender: TO b j e c t ) ; v a r P P I X , P P I Y: Integer; // X方向和Y方向打印机每英寸的点数 Rect: TRect; // 按比例放大后图片区域的大小 b e g i n Z o o m S c a l e : = S t r To I n t ( E d i t 4 . Te x t ) ; // 获取打印机每英寸的点数 P P I X : = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S X ) ; P P I Y: = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S Y ) ; // 计算左边距和上边距 L e f t M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 1 . Te x t ) / 2 . 5 4*P P I X ) ; To p M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 2 . Te x t ) / 2 . 5 4*P P I Y ) ; // 设置打印画幅的大小 R e c t . L e f t : = L e f t M a r g i n ; R e c t . To p : = To p M a r g i n ; R e c t . R i g h t : = I m a g e 1 . P i c t u r e . Wi d t h*Z o o m S c a l e + R e c t . L e f t ; R e c t . B o t t o m : = I m a g e 1 . P i c t u r e . H e i g h t*Z o o m S c a l e + R e c t . To p ; 第7章章打印章名161 下载 t r y P r i n t e r.BeginDoc; // 创建打印作业 P r i n t e r. C a n v a s . S t r e t c h D r a w ( R e c t , I m a g e 1 . p i c t u r e . G r a p h i c ) ; P r i n t e r.EndDoc; // 送往打印机 e x c e p t P r i n t e r.Abort; // 出错情况下中止打印 r a i s e ; e n d ; e n d ; 10) 在F o r m 2中添加F o r m 2窗体的O n C r e a t e事件的处理过程如下: procedure TForm2.Form2Paint(Sender: TO b j e c t ) ; v a r Rect: TRect; // 按比例放大后图片区域的大小 b e g i n // 设置预览区I m a g e 1组件的位置和大小 I m a g e 1 . Top :=0; I m a g e 1 . L e f t : = 0 ; I m a g e 1 . Wi d t h : = P a g e Wi d t h + 3 0 ; I m a g e 1 . H e i g h t : = P a g e H e i g h t + 3 0 ; // 在I m a g e 1组件中间画一个页面的示意图 Image1.Canvas.Pen.Mode := pmWhite; I m a g e 1 . C a n v a s . R e c t a n g l e ( 0 , 0 , P a g e Wi d t h + 3 0 , P a g e H e i g h t + 3 0 ) ; Image1.Canvas.Pen.Mode := pmBlack; I m a g e 1 . C a n v a s . F i l l R e c t ( R e c t ) ; I m a g e 1 . C a n v a s . R e c t a n g l e ( 2 0 , 2 0 , P a g e Wi d t h + 2 0 , P a g e H e i g h t + 2 0 ) ; Image1.Canvas.Pen.Color := clGray; Image1.Canvas.Pen.Mode := pmCopy; Image1.Canvas.Pen.Style :=psSolid; I m a g e 1 . C a n v a s . R e c t a n g l e ( 1 5 , 1 5 , P a g e Wi d t h + 1 5 , P a g e H e i g h t + 1 5 ) ; // 显示图形 R e c t . L e f t : = 1 5 + F o r m 1 . L e f t M a r g i n ; R e c t . To p : = 1 5 + F o r m 1 . To p M a r g i n ; R e c t . R i g h t : = ( F o r m 1 . I m a g e 1 . P i c t u r e . Wi d t h*Form1.ZoomScale) div Form1.PreviewScale + R e c t . L e f t ; R e c t . B o t t o m : = ( F o r m 1 . I m a g e 1 . P i c t u r e . H e i g h t*Form1.ZoomScale) div Form1.PreviewScale + R e c t . To p ; I m a g e 1 . C a n v a s . S t r e t c h D r a w ( R e c t , F o r m 1 . I m a g e 1 . P i c t u r e . G r a p h i c ) ; e n d ;
6) 在F o r m 1的i n t e r f a c e部分的u s e s语句中将P r i n t e r s包含进去:
i n t e r f a c e
u s e s
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,Printers;
. . .
7) 在U n i t 1 . p a s文件的T F o r m 1类型定义处,添加下面的变量:
t y p e
TForm1 = class(TForm)
. . .
p u b l i c
{ Public declarations }
ZoomScale: Integer; // 打印时放大的比例
PreviewScale:Integer; // 预览时缩小的比例
L e f t M a r g i n , TopMargin: Integer; // 左边距和上边距
e n d ;
8) 在U n i t 2 . p a s文件的T F o r m 2类型定义处,添加下面的变量:
t y p e
TForm2 = class(TForm)
. . .
p u b l i c
{ Public declarations }
P a g e Width,PageHeight:Integer; // 预览区域页面的宽度和高度
e n d ;
9) 在F o r m 1中添加F o r m 1窗体的O n C r e a t e事件、B u t t o n 1组件(打印预览)的O n C l i c k事件和
B u t t o n 2组件(打印)的O n C l i c k事件的处理过程如下:
procedure TForm1.Form1Create(Sender: TO b j e c t ) ;
b e g i n
I m a g e 1 . P i c t u r e . L o a d F r o m F i l e ( ' Tr e e . b m p ' ) ; // 装入位图文件
e n d ;
procedure TForm1.Button1Click(Sender: TO b j e c t ) ;
下载
v a r
P P I X , P P I Y:Integer; // X方向和Y方向打印机每英寸的点数
b e g i n
PreviewScale := StrTo I n t ( E d i t 3 . Te x t ) ; // 预览显示比例
Z o o m S c a l e : = S t r To I n t ( E d i t 4 . Te x t ) ;
// 获取打印机每英寸的点数
P P I X : = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S X ) ;
P P I Y: = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S Y ) ;
// 1英寸= 2 . 5 4厘米
// 计算左边距和上边距
L e f t M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 1 . Te x t ) / 2 . 5 4*PPIX) div PreviewScale;
To p M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 2 . Te x t ) / 2 . 5 4*PPIY) div PreviewScale;
// 计算页面大小
if RadioGroup1.ItemIndex = 0 then
b e g i n
F o r m 2 . P a g e Wi d t h : = Tr u n c ( 2 1 . 0 / 2 . 5 4*PPIX) div PreviewScale;
F o r m 2 . P a g e H e i g h t : = Tr u n c ( 2 9 . 7 / 2 . 5 4*PPIY) div PreviewScale;
e n d
e l s e
b e g i n
F o r m 2 . P a g e Wi d t h : = Tr u n c ( 1 8 . 4 / 2 . 5 4*PPIX) div PreviewScale;
F o r m 2 . P a g e H e i g h t : = Tr u n c ( 2 6 . 0 / 2 . 5 4*PPIY) div PreviewScale;
e n d ;
// 显示预览窗口
F o r m 2 . S h o w ;
e n d ;
procedure TForm1.Button2Click(Sender: TO b j e c t ) ;
v a r
P P I X , P P I Y: Integer; // X方向和Y方向打印机每英寸的点数
Rect: TRect; // 按比例放大后图片区域的大小
b e g i n
Z o o m S c a l e : = S t r To I n t ( E d i t 4 . Te x t ) ;
// 获取打印机每英寸的点数
P P I X : = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S X ) ;
P P I Y: = G e t D e v i c e C a p s ( P r i n t e r. H a n d l e , L O G P I X E L S Y ) ;
// 计算左边距和上边距
L e f t M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 1 . Te x t ) / 2 . 5 4*P P I X ) ;
To p M a r g i n : = Tr u n c ( S t r To F l o a t ( E d i t 2 . Te x t ) / 2 . 5 4*P P I Y ) ;
// 设置打印画幅的大小
R e c t . L e f t : = L e f t M a r g i n ;
R e c t . To p : = To p M a r g i n ;
R e c t . R i g h t : = I m a g e 1 . P i c t u r e . Wi d t h*Z o o m S c a l e + R e c t . L e f t ;
R e c t . B o t t o m : = I m a g e 1 . P i c t u r e . H e i g h t*Z o o m S c a l e + R e c t . To p ;
第7章章打印章名161
下载
t r y
P r i n t e r.BeginDoc; // 创建打印作业
P r i n t e r. C a n v a s . S t r e t c h D r a w ( R e c t , I m a g e 1 . p i c t u r e . G r a p h i c ) ;
P r i n t e r.EndDoc; // 送往打印机
e x c e p t
P r i n t e r.Abort; // 出错情况下中止打印
r a i s e ;
e n d ;
e n d ;
10) 在F o r m 2中添加F o r m 2窗体的O n C r e a t e事件的处理过程如下:
procedure TForm2.Form2Paint(Sender: TO b j e c t ) ;
v a r
Rect: TRect; // 按比例放大后图片区域的大小
b e g i n
// 设置预览区I m a g e 1组件的位置和大小
I m a g e 1 . Top :=0;
I m a g e 1 . L e f t : = 0 ;
I m a g e 1 . Wi d t h : = P a g e Wi d t h + 3 0 ;
I m a g e 1 . H e i g h t : = P a g e H e i g h t + 3 0 ;
// 在I m a g e 1组件中间画一个页面的示意图
Image1.Canvas.Pen.Mode := pmWhite;
I m a g e 1 . C a n v a s . R e c t a n g l e ( 0 , 0 , P a g e Wi d t h + 3 0 , P a g e H e i g h t + 3 0 ) ;
Image1.Canvas.Pen.Mode := pmBlack;
I m a g e 1 . C a n v a s . F i l l R e c t ( R e c t ) ;
I m a g e 1 . C a n v a s . R e c t a n g l e ( 2 0 , 2 0 , P a g e Wi d t h + 2 0 , P a g e H e i g h t + 2 0 ) ;
Image1.Canvas.Pen.Color := clGray;
Image1.Canvas.Pen.Mode := pmCopy;
Image1.Canvas.Pen.Style :=psSolid;
I m a g e 1 . C a n v a s . R e c t a n g l e ( 1 5 , 1 5 , P a g e Wi d t h + 1 5 , P a g e H e i g h t + 1 5 ) ;
// 显示图形
R e c t . L e f t : = 1 5 + F o r m 1 . L e f t M a r g i n ;
R e c t . To p : = 1 5 + F o r m 1 . To p M a r g i n ;
R e c t . R i g h t : = ( F o r m 1 . I m a g e 1 . P i c t u r e . Wi d t h*Form1.ZoomScale) div Form1.PreviewScale
+ R e c t . L e f t ;
R e c t . B o t t o m : = ( F o r m 1 . I m a g e 1 . P i c t u r e . H e i g h t*Form1.ZoomScale) div Form1.PreviewScale
+ R e c t . To p ;
I m a g e 1 . C a n v a s . S t r e t c h D r a w ( R e c t , F o r m 1 . I m a g e 1 . P i c t u r e . G r a p h i c ) ;
e n d ;