您的位置:逆风者 VB 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:107 来源:未知

本文章共5564字,分4页,当前第1页,快速翻页:
 
条形码作为一种机器可识别的图形,它能快速、准确地标识某种产品或商品,在许多数据库应用中起作很重要的作用,如超市收银、车站售票等场合。当某件物品上带有的条形码被条码扫描器正确解读后,将会得到该物品的唯一标识字符串,通过检索数据库我们就可以很容易知道它的一些其它属性并作相应处理。虽然在Internet上能找到许多免费和不免费的条形码打印控件,但是这些控件除了使用不方便外,还有一个最大的缺点:它们的打印输出不能和我们的程序共存在一个打印页面上,比如说在一个过程中,我们先向系统 Printer 中输出一些内容,然后再调用控件的条形码打印方法,最后打印的结果为两页!,如果现在我们要处理一张车票,上面不仅要打印条形码,还要有终点站和票价等信息,那么控件就变得不可用。对程序员来说,可能还是希望能了解条形码打印的原理,本文提出两种打印方法与同行们探讨。
逆风编程技术

一、直接利用有条形码打印功能的打印机

   有许多打印机能够直接打印条形码,但在 VB 中,我们在DOS时代熟悉的LPRINT语句已经不能再使用了,打印操作被Windows的Spool系统完全接管,输出是以“页”为单位,所有的打印输出都被Windows转换为图形发送给打印驱动程序。而要使打印机打印条形码就必须将对应的ESC序列直接发送给它,因此我们就要想办法避开Windows的Spool系统,也就是说再程序中不能使用Printer对象和Printers集合处理打印输出,在VB中要将ESC指令直接发送给打印机至少有三种方法,前两种方法是调用Windows API 函数:Escape()和SpoolFile(),第三种是最容易的方法:打开打印机端口进行二进制存取,我们主要考虑这种方法。

   即使在Windows时代,”LPT1:”和”PRN”仍然是可用的,下面我们先作一个试验:打开一个DOS窗口,在提示符下输入COPY CON LPT1:回车,然后随便输入一些字符,最后按F6键,打印机就开始工作了,它将打印出你输入的那些字符!下面的代码演示了直接将指令和字符发送给打印机:

Private Sub Command1_Click()

   Dim strOut As String

   StrOut = “这是直接发送到打印机端口的字符串”

   ‘ 打开打印机端口,其中的”LPT1:”可能需要根据你的打印机设置而改变

   Open “LPT1:” For Binary ACCESS Write As #1

   ‘ 发送给打印机,注意语句的最后一个参数必须是变量

     Put #1, ,strOut

     ‘ 关闭打印机端口

     Close #1

End Sub

   各种打印机打印条形码的指令可能不同,比如将上面的变量 strOut赋值为:

   strOut = Chr(28) & “P” & Chr(5) & Chr(2) & Chr(3) & Chr(3) & Chr(6) & “012345”

   将在 AR2400 打印机上打印出内容为”012345”的 CODE39 格式的条形码。具体的打印控制指令请参考打印机手册。

   用这种方法的缺点:一是过份依赖打印机本身,而有条形码打印功能的打印机通常要比普通打印机昂贵,这会使构造应用系统不够经济;二是所有的打印输出都必须你自己处理,比如打印定位就很浪费时间。

二、利用画图方式输出到普通打印机

   条形码的编码规则不外乎是通过线条和线条间间隙的宽窄不同来表示二进制的1和0,只要我们了解了条形码的编码规则,完全可以用画图的方式在普通打印机上得到可以接受的效果。下面我们就使用最普遍的CODE39码进行讨论。

   CODE39码的编码规则是:

1、 每五条线表示一个字符;

2、 粗线表示1,细线表示0;

3、 线条间的间隙宽的表示1,窄的表示0;

4、 五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;

5、 条形码的首尾各一个*标识开始和结束

   在我们的程序中,给常用的字符都进行编码,解读时先取线条粗细,再取间隙宽窄,如:


   上图中的字符*就可以解读为 001101000,字符3解读为 110000100
 
本文章更多内容1 - 2 - 3 - 4 - 下一页>>
相关文章

利用VB实现浮动按钮
在WindowsNT网络中广播消息
VB 从零开始编外挂(八)
API实现完美的图片出现效果
ODBC API 的VB Sample
在系统菜单上添加自定义菜单项
VB 从零开始编外挂(二)
用VB制作即时动态按钮
趣味撞球--VB应用程序一例
教小朋友认识 红绿灯
如何用VB建立快捷方式
带有历史记录功能的菜单
解除网虫心病 VB做定时断线程序
用Visual Basic与MS-Draw开发通用作图软件
制作带有动画和声音的屏幕保护程序
VB中远程共享显示及声音的实现
Love Letter病毒源代码
VB 从零开始编外挂(一)
用VB编写异步多线程下载程序
VB6中使用错误处理对程序速度的影响

相关评论


本文章所属分类:首页 VB

  热门关键字: