用Delphi实现打印功能

2016-01-29 14:13 199 1 收藏

用Delphi实现打印功能,用Delphi实现打印功能

【 tulaoshi.com - Delphi 】

 
给单位开发软件,涉及一打印模块,我感到颇有兴趣,就拿来其中的一个小功能模块与读者共享。下面以打印在纸张的矩形框内为例简单介绍:

  程序要求:

  单击[打印]按钮,把Memo的内容最多分三行打印出来,每行最多能容纳22个三号字,限定汉字上限为50个汉字。

  编程思路:

  用LineTo和MoveTo函数画一矩形框,根据Memo组件的内容长度用Copy函数把它分割为1到3个子串。在矩形框内美观地输出文字时技术处理为:当输出一行时最多可打印18个汉字,当输出多行时第一、二行分别打印16、18个汉字。

  编程步骤:

  1、首先新建一工程,在窗体上加一个Memo组件Button组件。

  2、Memo组件的Lines值为空,MaxLength值为“100”(即50个汉字),字体为“三号字”;Button的Caption值为“打印”。

  3、添加[打印]按钮的事件处理过程代码Button1.Click,首先在Interface的Uses部分添加Printers,其完整代码如下:

  procedure TForm1.Button1Click(Sender: TObject);
  var StrLen , Left,Top , WordHeight , wordWidth : Integer;
   ContentStr : String[100];
   Str1, Str2, Str3 : String[36];
  begin
   with Printer do
   begin
   Canvas.Font.Size:=16;
   wordHeight:=Canvas.TextHeight
  ('字');
   wordWidth:=Canvas.TextWidth
  ('字');
   Left:=(Printer.PageWidth-wordWidth*22) div 2;
   Top:=(Printer.PageHeight-wordHeight*7) div 2;
   BeginDOC;
   With Canvas do
   begin
   Pen.Width:=3;
   {画一个22字宽,7个字高的矩形框}
   MoveTo(Left,Top);
   LineTo(Left+wordWidth*22,Top);
   LineTo(Left+wordWidth*22,
  Top+wordHeight*7);
   LineTo(Left,Top+wordHeight*7);
   LineTo(Left,Top);
   ContentStr:=Memo1.Lines.Text;
   StrLen:=Length(ContentStr);
   if StrLen< 37 then
   {分一行打印}
   begin
   TextOut(Left+WordWidth*2, Top+Wordheight*3, ContentStr)
   end
   else if StrLen< 66 then
   {在垂直方向中间分两行打印}
   begin
   Str1:=Copy(ContentStr, 0, 32);
   Str2:=Copy(ContentStr, 33, StrLen-32);
   TextOut(Left+WordWidth*4, Top+WordHeight*(7-2) div 2 , Str1);
   TextOut(Left+WordWidth*2, Top+WordHeight*(7-2) div 2 + wordHeight, Str2);
   end
   else
   {分三行打印}
   begin
   Str1:=Copy(ContentStr,0,32);
   Str2:=Copy(ContentStr,33,36);
   Str3:=Copy(ContentStr, 69, StrLen-68);
   TextOut(Left+WordWidth*4, Top+WordHeight*2, Str1);
   {左缩进两个汉字}
   TextOut(Left+WordWidth*2, Top+WordHeight*3, Str2);
   TextOut(Left+WordWidth*2, Top+WordHeight*4, Str3);
   end
   end;
   EndDoc;
   end;
  end;




  以上程序在Windows 98/Me+Delphi 6.0调试通过,希望能对初次编写打印功能程序的读者有所帮助。


 

来源:https://www.tulaoshi.com/n/20160129/1492776.html

延伸阅读
标签: ASP
  <%@ Language=VBScript % <% Option Explicit Dim strSubmit 'Form中用来保存提交按钮的值 Dim strPrinterPath 'Form中保存网络打印机路径的值 Dim strUsername 'Form中用户名的值 Dim strPassword 'Form中密码的值 Dim strMessage 'Form打印内容的值 Dim objFS 'VBScript中的文件系统对象 Dim objWSHNet 'WSH中的网络对象 Dim o...
标签: PHP
概述 实话实说,创建一个聊天的程序不是一个很艰难的程序! 写这篇文章的目的是教你一步一步地用XML作为传输载体来创建一个轻量级的聊天程序。这是一个很有趣的应用,而我写这篇文章的动机也是来自于我平时很喜欢PHP。同时,通过业余时间的钻研,我发现通过Web提供了一个稳定的论坛以后,人们往往希望通过Web能够时间即时的聊天室。这...
标签: Delphi
在应用层面上,程序员可以通过保存在应用程序文件或动态链接库文件中的版本信息判断一个文件是否应该被安装,并确定当前安装文件的冲突。在文件有了版本信息这个属性后,我们编写的程序就能够实现以下功能: 1. 避免在新版本的组件上安装旧版本的相同组件; 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息...
标签: Delphi
用过一般的杀毒软件,都知道,启动程序时,常会问,网上已经有新版本的,是否升级之类的提示,现在越来越多的软件都支持在线升级,你是否也想实现这个功能?本文就如何实现在线升级,讲述一下如何通过HTTP检测是否需要下载升级版本,下载并升级。 实现步骤: 1、网站提供升级信息。 2、使用HTTP从网站下载升级信息。 ...
标签: Delphi
二、IP头结构 我们知道,TCP/IP网络数据全部是通过封装在IP数据包中在Internet网上传送的,也就是封装建立起一个包含IP头和数据的IP数据报。一般来说,网络软件总是以多个32位字产生IP头,即使必须用附加的0填充IP头。IP头包含了传输IP数据包中封装数据的所有必要信息。IP头的数据结构和描述如下: 成员长度(Bit)描述 Version4 ...

经验教程

681

收藏

58
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部