说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何解决VB中的Grid 控件的打印问题

HTML文档下载 WORD文档下载 PDF文档下载
VB如何解决VB中的Grid 控件的打印问题
中 原 油 田 计 算 中 心 武 正 伦 李 俊 海
---- Grid 控 件 是Visual Basic 最 常 见 控 件 之 一, 从VB3.0 到VB5.0 都
有 该 控 件。 也 是VB 爱 好 者 最 喜 爱 的 工 具 之 一。 用 它 可 以 以
表 格 的 形 式 显 示、 浏 览 数 据, 特 别 是 数 据 库 应 用, 直 接 绑
定 即 可 显 示 浏 览 数 据 库 信 息。 然 而, 美 中 不 足 的 是Grid 没
有 编 辑 和 打 印 功 能, 列 与 列 的 位 置 不 能 相 互 交 换。 笔 者 曾
尝 试 着 给Grid 增 添 了 这 些 功 能, 使 之 锦 上 添 花, 功 能 更 强
大。 下 面 给 出 改 进 方 法 及 源 程 序, 读 者 只 需 按 步 骤 写 下 源
程 序 即 可 使 你 的Grid 具 有 打 印 功 能。 该 程 序 笔 者 在HP5/100
Window 95 环 境 下 用VB5.0 调 试 通 过。

---- 给Grid 控 件 增 加 打 印 方 法 有 三 种:1 是 直 接 打 印 控 件 的
方 法,2 是 过 printer 来 实 现 打 印 功 能,3 是 通 过 调 用MS-WORD 及
MS-EXCEl 来 实 现 打 印。

---- 首 先, 打 开 一 个 应 用, 在FORM1 中 增 加DATA 控 件DATA1, 把
DATA1 的CONNECT 属 性 设 为dBASE III, 再 把DATABASENAME 属 性 设 为D:\
PJXM.DBF。 然 后 再 在FORM1 中 增 加MSFLEXGRID 空 间GRID1, 并 把GRID1
的DATASOURCE 属 性 设 为DATA1。 这 样 数 据 库PJXM.DBF 的 信 息 就 会 在
GRID1 中 显 示 出 来。

---- 方 法 一: 直 接 打 印 窗 体 法, 在FORM1 中 增 加 命 令 按 钮(
command),CAPTION 属 性 设 为 直 接 打 印, 再 写 入 下 列 编 码:

Sub command_click
Form1.printform
End sub

---- 这 样 即 可 通 过 打 印 窗 体FORM1 的 方 法 把GRID1 的 数 据 打 印
出 来, 遗 憾 的 是 只 能 打 印GRID1 中 显 示 的 数 据 部 分, 显 示 不
出 来 的 则 无 法 打 印, 而 且 这 种 打 印 方 法 很 象 屏 幕 硬 拷 贝
把 其 他 控 件 也 打 印 出 来。 也 不 能 灵 活 的 控 制 字 体 等。

---- 方 法 二: 通 过PRINTER 实 现 打 印。 这 种 方 法

---- 1、 加 入 打 印 命 令 按 钮(command1)、 函 数(prnt1) 即 可 实 现 打
印 功 能, 写 入 下 面 代 码, 读 者 稍 加 改 动 可 写 成 标 准 的 函 数
或 过 程。

Function prnt1 (x As Integer, y As Integer,
font As Single, txt As String)
printer.CurrentX = x
printer.CurrentY = y
printer.FontBold = False
printer.FontSize = font
printer.Print txt
End Function

Sub command1_click
Dim fnt As Single
Dim pp as integer
Pp=0'设置开始页码0
Dim stry,strx,strx1,stry1,linw,page1,p As Integer
Static a(8) As Integer'定义打印的列数
ss$ = "内部结算存入款对帐单"'定义表头
kan = 0
For i = 0 To 8
a(i) = 1500'定义每列宽
kan = kan + a(i)'计算表格总宽度
Next

page1 = 50'定义每页行数
strx = 200
strx1 = 200'定义X方向起始位置
stry = 1400
stry1 = 1400'定义Y方向起始位置
linw = 240'定义行宽
fnt = 8'定义字体大小
printer.fontname = "宋体"'定义字体

dd = prnt1(4000, 700, 18, ss$)'打印标题
printer.Line (strx - 50, stry - 30)
-(strx + kan - 10, stry - 30)
For j = 0 To gridrow - 1'gridrow为所要打印的行数
grid1.row = j
strx = strx1
printer.Line (strx - 50, stry - 30)
-(strx + kan - 10, stry - 30)
p = p + 1
For i = 0 To 8
grid1.col = i
dd = prnt1(strx, stry, fnt, grid1.text)
strx = strx + a(i)
Next

If p > page1 Then'next page
p = 0
strx = strx1
'line last line
printer.Line (strx - 50, stry + linw)
-(strx + kan - 10, stry + linw)
stry = stry1
'line col
For n = 0 To 8
printer.Line (strx - 30, stry - 30)
-(strx - 30, stry + (page1 + 2) * linw)
strx = strx + a(n)
Next
printer.Line (strx - 30, stry - 30)
-(strx - 30, stry + (page1 + 2) * linw)
pp=pp+1
foot$="第 "+cstr(pp)+"页"
dd = prnt1(strx - 30-1000, stry + (page1 + 2)
* linw+100, 10, foot$)'打印页角码

printer.NewPage'next page
dd = prnt1(4000, 700, 18, ss$) '打印标题
strx = strx1
stry = stry1
printer.Line (strx - 50, stry - 30)-
(strx + kan - 10, stry - 30)' print first row
Else
stry = stry + linw
End If
Next
st = stry
If p < page1 Then '在最后页剩余划空行
For o = p To page1 + 1
strx = strx1
printer.Line (strx - 50, stry - 30)
-(strx + kan - 10, stry - 30)
stry = stry + linw
Next
End If
stry = stry1
strx = strx1
stry = stry1 'line col
For n = 0 To 8
printer.Line (strx - 30, stry - 30)-
(strx - 30, stry + (page1 + 2) * linw)
strx = strx + a(n)
Next
printer.Line (strx - 30, stry - 30)-
(strx - 30, stry + (page1 + 2) * linw)
pp=pp+1
foot$="第 "+cstr(pp)+"页"
dd = prnt1(strx - 30-1000, stry + (page1 + 2)
* linw+100, 10, foot$)'打印页角码

printer.EndDoc'打印结束
Endsub

---- 这 种 方 法 通 过 灵 活 的 编 程 可 以 方 便 地 调 整 字 体、 字 型、
线 形、 页 面、 纸 张 大 小 等。 可 打 印 出 比 较 满 意 的 效 果。 如
果 你 的 计 算 机 上 装 有MICROSOFT WORD 和MICRO EXCEL, 最 精 彩 的 用
法 还 是 把GRID 的 表 格 通 过VB 发 送 到MICROSOFT WORD 及MICRO EXCEL。
生 成MICROSOFT WORD 和MICRO EXCEL 表 格。 这 样 就 可 以 充 分 利 用
MICROSOFT WORD 和MICRO EXCEL 的 打 印、 编 辑 功 能 打 印 出 更 理 想 的
效 果。 下 面 逐 一 介 绍。

---- 方 法 三: 通 过 生 成MICROSOFT WORD 表 格 打 印

---- 1、 在declaration 中 写 入:

Dim msword As Object

---- 2、 加 入 打 印 命 令 按 钮(command2),CAPTION 设 为" 生 成WORD 表
格", 写 入 下 面 代 码,

Private Sub command2_Click()

screen.MousePointer = 11
Set msword = CreateObject("word.basic")

Dim AppID, ReturnValue
appID = Shell("d:\office97\office\WINWORD.EXE", 1)
' Run Microsoft Word.

msword.AppActivate "Microsoft Word"
'msword.AppActivate "Microsoft Word", 1
full
Screen.MousePointer = 0
End Sub

---- 2、 写 入 以 下 过 程full()

Sub full()
Dim i As Integer, j As Integer,
col As Integer, row As Integer
Dim cellcontent As String
Me.Hide
cols = 4'表格的列数
row = gridrow'打印表的行数
msword.filenewdefault
msword.MsgBox "正在建立MS_WORD报表,
请稍候.......", "", -1
msword.leftpara
msword.screenupdating 0
msword.tableinserttable , col, row, , , 16, 167
msword.startofdocument
for j=0 to gridrow' 表格的行数
grid1.row=j
For i = 1 To cols
Gri1d.col=i
If IsNull(grid1.text) Then
cellcontent$ = ""
Else
cellcontent$ = grid1.text
End If
msword.Insert cellcontent$
msword.nextcell
Next i
Next j
msword.tabledeleterow
msword.startofdocument
msword.tableselectrow
msword.tableheadings 1
msword.centerpara
'msword.startdocument
msword.screenrefresh
msword.screenupdating 1
msword.MsgBox " 结束", "", -1
Me.Show

End Sub

---- 方 法 四: 通 过 发 送 到MICROSOFT EXCEL 实 现 表 格 打 印

---- 1、 加 入 打 印 命 令 按 钮(command3),CAPTION 设 为" 生 成EXCEL 表
格", 写 入 下 面 代 码

Private Sub command3_Click()
Dim i As Integer
Dim j As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
'Set xlBook = xlApp.Workbooks.Add
'On Error Resume Next
Set xlBook = xlApp.Workbooks.Add 'Open("d:\text2.xls")
Set xlSheet = xlBook.Worksheets(1)
xlSheet.Cells(6, 1) = "i"
For i = 0 To gridrow
grid1.Row = i
For j = 0 To 6
Grid1.Col = j

If IsNull(Grid1.Text) = False Then
xlSheet.Cells(i + 5, j + 1) = Grid1.Text
End If
Next j
Next i
Exit Sub


新一代IDE Light Table开源:让编程工作更简单 图片应用也能高大上,看Cooliris如何玩转无人机 拥抱Spark,机遇无限——Spark Summit 2013精彩回顾 1月10日:改变世界的iPhone七岁了,你是传奇! 同洲电子推出首款手机操作系统960OS 免费授权使用 如何在Windows 8.1的IE11中打开同步选项卡? 25年老对手评价微软:换CEO可行,但是太迟了 【PPT集萃】十位一线专家分享Spark现状与未来(三) 万元奖品等你拿!2014创客118新年大Party! Firefox OS的2013回顾和2014展望 Strom8 CEO:搞好手游开发,合伙人很重要 2013年Q4全球PC出货量同比下滑6.9% 已连续下滑七个季度 一周消息树:2013年十大产品、图书、公司盘点 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势 研发周报:超实用的JavaScript技巧及最佳实践 2013最吃香的技能:Java称霸、Android势头正猛 移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 求助!在PB中用过WINSOCK的看过来。 如何让DBGrid只显示时间而不显示日期? xp操作系统安装SqlServer2000???? 哎,搞了快一天了,这个删除的东东还是搞不出来,各位HELP ME? apache2.0.47和tomacat4.1整合的一个问题,用mod_jk-2.0.42.dll 急需<<短消息网关设备规范1.2>>,接分 动态设定数据窗口的返回参数(仅有15分) 主题:各位老兄,dtmf码怎么识别? Help Me!(求救!) vmware4.0.2build5589下安装redhat9的问题,非常奇怪 [求助]如何进系智能系统开发? 公司内用代理可以web,我可以用这个代理上MSN吗? 弄个了BBS玩,希望大家能捧捧场 关于LINUX内核模块的按需卸载及安装 DataGrid又一模板问题? 如何把很多.java程序打包到一个.cab文件里? 我在sql里面见了一个DTS 我不知道在c#里面怎么写程序执行它 我写的一个粒子系统屏保,大家看看不?其中有些技术问题,希望和大家讨论讨论。 菜鸟初学问题,别人给我的SQL Scripts File如何执行 菜鸟提问:如何进入xp的安全模式????? 我们企业要上ERP,交通施工行业,请推荐一些企业上ERP方面好一点的文章,不同行业也行,一篇给50分,在线等,多多益善! 初级问题:使用CDO时的cdoSendUserReplyEmailAddress,cdoSendEmailAddress这两项怎么设置? 请教菜鸟问题,在线等待 高分:"MyGina.dll"哪位高手有这个文件,用于屏蔽CTRL+ALT+DELETE?? 急!用odbc操作access时,可以添加,但不可以删除.(表的列比较多140个) 推荐几本比较好的适合初学的汇编教材 寻找对手,乒乓球,围棋,台球,本人在深圳大冲 初学类,不太明白其中关于const的使用。 请教:如何看/etc/wtmp的內容,打开都是乱码 一个字符串数组的问题??? 请问要怎样才能跟踪一个不出现窗口的系统进程直到结束? 急,如果一个CWnd类不作派生,怎么在它的包容wnd中,截获其Windows消息??? 偶尔找不到硬盘 寻求对,围棋,乒乓球,台球,本人在深圳大冲 请教` 请问我要在邮局汇款单上打印.... 怎么样用语句把ACCESS数据库里的数据导入DATAGIRD 红色!!!!!你过来!我要和你打架!我是淡蓝色!~!!!! 有需要函数库的!superruntimerlibary包含258个函数。图标菜单。。。。。 WindowsMediaPlayer怎么用? 请问我下载的fastreport v2.5中的fr_class.pas怎么用,在哪里可找到fr v2.5的注册版? 初学者又问 dxImageEdit的问题(DevExpress) 问一个关于richtext控件的简单问题,有分 在线求:光纤网络方案,最好有价格! 大家快帮帮忙,急!!分不够可以再加 当选中datagrid的某行时,怎样让这一行获得焦点(改变颜色)? 多少钱可以把我们给买了! “WGE”团队诚邀英才 怎样将IPAddress类型转换成Int64整型? 只放frreport1到form上運行都會出現問題。 回信的格式 解剖鲸鱼不当为什么会爆炸? 鲸鱼的内脏构造 李白和杜莆谁的诗最多 在线等答案哦 李白和杜莆谁的诗最多 关于描写江南风景的诗句有那些?李白和杜莆合称什么? 李白,杜莆,白居易,王唯,谁的诗更厉害! 回信的格式怎么写 我的英语听力总不好 你有办法教下我.老师播放听力时,有些我总听不懂. 写回信的格式 沙特不收联合国“大礼”伦敦股市23日下跌图文:钱江隧道开始扫尾 预计今年年底浙江发布一批高校干部任免信息中国全国政协副主席杜青林访问保加利亚视频:10岁男孩午夜被切断右手 扔进10岁杭州男孩被母亲男友砍去右手丢进少女黄鳝血放入下体冒充处女 敲诈嫖客21岁丽水姑娘惨遭男友碎尸 锯下人头18岁女子和男友吵架约见网友 被掐死伦敦股市股指23日下跌对暴力伤医行为“零容忍”安倍“抗衡中国”言论是不自量力严打一切形式的恐怖主义《温家宝谈教育》出版发行北京连发霾黄色预警第114届广交会三期开幕做最出色的自己吉林松原10分钟内连震两次墨脱公路通车深圳援藏干部深感欣慰涉会区域实行“实名制”巡防遵义市委书记廖少华 涉嫌严重违纪被免江山半壁七国妃极品悍将何以红尘怨魔尊大人追妻记闪婚老婆要翻身迷糊小姐勇敢爱情迷大话回到三国之称霸天下锦香赋曾经有个男盆友长安区博物馆旅游西冲情人岛旅游花鸟灯塔旅游南湾海滨浴场旅游花鸟岛旅游方特欢乐世界蓝水星旅游瓜皮岛旅游察尔森国家森林公园旅游成吉思汗庙旅游通惠河玉河遗址旅游慈禧水道旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘