根据给定文件的信息,本文将围绕“精彩编程与编程技巧—基于VB的通用折行打印程序”进行深入探讨。此程序主要关注如何在Visual Basic(简称VB)环境中实现文本的自动换行打印功能,这对于处理长字符串或者大量数据打印任务来说至关重要。 ### 一、程序概述 #### 1. 核心技术点 - **自动换行**:通过分析文本长度,判断何时进行换行操作,确保打印内容能够适配打印机纸张宽度。 - **动态字体大小调整**:允许用户设定字体大小,使得打印出来的文字既清晰又美观。 - **多字段打印**:支持从数据库中读取多个字段,并将其格式化后打印出来。 #### 2. 使用场景 - 企业内部文档打印。 - 报表打印。 - 多条记录的批量打印。 ### 二、关键代码解析 #### 1. 函数`prnt11` ```vb Function prnt11(X As Integer, Y As Integer, Font As Single, Txt As String, Val As Integer) ``` - **参数解释**: - `X`:指定打印时的初始横坐标。 - `Y`:指定打印时的初始纵坐标。 - `Font`:字体大小。 - `Txt`:待打印的文本字符串。 - `Val`:每行显示的字符数限制。 - **功能**:该函数负责根据传入的参数执行打印操作,包括自动换行处理。 #### 2. 实现细节 - 利用`Do While`循环逐段打印文本,每次循环打印不超过`Val`个字符。 - 每次打印完一行后更新当前纵坐标`Y`值以准备下一次打印。 - 当检测到待打印字符串为空时,将行号`rowlab`设为1,表示打印结束。 ### 三、界面设计与数据绑定 #### 1. Form1设计 - **控件列表**: - `Data`:用于连接数据库。 - `MSFlexGrid`:显示表格数据。 - `TextBox`:输入字段值。 - `CommandButton`:触发打印动作。 - **属性设置**: - 数据库名称:`Standards.mdb` - 记录源:`SN` #### 2. 打印按钮点击事件 ```vb Private Sub CmdPrnt1_Click() ``` - **实现逻辑**: - 设置初始坐标及字体。 - 调用`prnt11`函数打印标题。 - 绘制分割线。 - 打印具体数据项。 - 结束文档打印。 ### 四、程序运行流程 1. 用户点击打印按钮`CmdPrnt1`。 2. 触发`CmdPrnt1_Click`事件。 3. 执行打印前的初始化工作,如设置字体、坐标等。 4. 调用`prnt11`函数完成实际的打印工作。 5. 完成打印后关闭打印任务。 ### 五、总结 通过上述内容,我们了解了基于VB的通用折行打印程序的主要实现思路和技术要点。该程序不仅实现了基本的文本打印功能,还考虑到了自动换行和字体大小调整等高级需求。这对于需要频繁处理大量数据打印任务的企业来说具有很高的实用价值。同时,对于学习VB编程的初学者来说,该项目也是一个非常好的实践案例,有助于加深对文本处理和GUI设计的理解。
作者:孔祥军
一. 概述
---- 几乎所有数据库应用软件,都需要打印单证和报表。常见的方法是利用VB的Crystal Reports(水晶报表)方式,通过TextBox等数据绑定控件,调用Print方法直接输出。虽然Crystal Report这一个功能强大、样式丰富且无编程方式的报表编制程序能适应大部分单证、报表打印的需要,但是Crystal Reports引擎是一个动态链接库,需许多文件支持和调用更多系统资源,大大增加系统负担。
---- 另一种解决办法是通过Printer对象的Print方法,直接打印字符串。这虽然减少了系统资源的开销,但它不能直接用于打印复杂的单证和报表。本文通过两个实例,阐述一个通用折行打印程序的编程和在单证及报表的应用。
二. 编程实现及实例
---- 为便于阐述的方便,我们先建立一个Access数据库Standards.mdb,其内SN表由以下几个字段组成:
---- 标准号(文本,17)
---- 标准名称(文本,255)
---- 英文名称(文本,255)
---- 实施日期(日期,8)
---- 修定日期(日期,8)
---- 发布日期(日期,8)
---- 代替标准(文本,50)
---- 通用折行打印程序编制操作如下:
---- 1.在VB5.0编程环境中,新建一个工程Project1;
---- 2. 在Project1中添加Moduel,在Moduel模块中定义一个记录最大折行数的公用变量Rowlab和Function函数(以下程序都经过实际运行测试,可以原样复制使用);
Public rowlab As Integer
'定义一个公用变量
Function prnt11(X As Integer, Y As
Integer,Font As Single, Txt As String, Val As Integer)
Dim str As String, str1 As String,
str2 As String ,I As Integer
Printer.CurrentX = X
Printer.CurrentY = Y
Printer.FontBold = False
Printer.FontSize = font
str = txt
str2 = str
I = 0
rowlab = 0
If Len(Trim(str)) = 0 Then
rowlab = 1 '待打印字符串为空的标志
Else
Do While Len(str) > 0
Printer.CurrentX = X
Printer.CurrentY = Y + rowlab * 240
rowlab = rowlab + 1
If Len(str) >= val Then
str1 = Mid(str, 1, val)
Printer.Print str1
I = I + 1
str = Mid(str2, I * val + 1)
Else
Printer.Print str
Exit Do
剩余7页未读,继续阅读
- 粉丝: 22
- 资源: 3095
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024年新的全的2024年新的全的《建设工程造价鉴定规范》GBT51262-2017
- SimHei字体包(支持中文,正负号等)
- 基于Django+MySQL实现的校园智能点餐系统源码+数据库(高分项目)
- 基于Django实现校园智能点餐系统源码+数据库(高分期末大作业)
- 知识付费pc付费模板系统知识付费付费模板
- ARM Developer Guide
- Lazarus IDE 3.3-Free Pascal Windows版本
- 20190312-180244-旋转磁体产生的场造成激光功率减小
- 个人课程设计基于PCA和滑动窗口的网络入侵检测系统源码+项目说明.zip
- 基于尺度空间流的端到端视频压缩优化方法