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

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

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

UNITE 2015干货不断,三天日程抢先看! iOS 8发布近一年,苹果HomeKit都带来了什么? Facebook开源移动网络测试工具Augmented Traffic Control 用JavaScript开发移动原生应用,Facebook正式开源React Native! 《知性》,探寻移动化社区的敏感带 【程序员电子刊精选】技术人员如何参与产品设计讨论之激活那一潭死水 Google开源代码构建工具Bazel 长点心吧!为啥健身应用让你越减越肥? 微信公众号能删除单篇文章了 安卓Android手机应用开发入门书籍推荐 自动释放内存!Facebook推出强大Android图片库Fresco 《近匠》AR学校:从教育领域看增强现实机遇何在 专访Mellanox CEO Eyal Waldman:InfiniBand与以太网齐驱并进 性能更胜一筹 IM助你打造千万级App——容联•云通讯线下沙龙 乐视智能硬件再发力,超级自行车今发布 专访格灵深瞳CTO赵勇:为&quot; 计算机视觉&quot; 赋予智慧的光芒 【程序员电子刊精选】水火不容?研发人员也是产品经理! 如何打动用户?携程用户体验实践分享 【征文】Java二十周年特别策划——谈谈我与Java的那些年、这些事 Facebook的愿景以及虚拟现实的未来 iBeacons一年回顾 英特尔中国30周年之际 IDF上你需要了解的5件事 OpenCloud 2015参会者的三大特征(附列表) 友盟移动互联网趋势报告解读:垂直领域应用竞争白热化 墨腾动漫CTO吴建学:初创公司的生存之道 亿航与高德达成战略合作 LBS+引爆智能硬件软实力 《近匠》火柴手写码,输不错的验证码利器 Web、App中添加动效设计应遵循的12条原则 越狱与开源:2015移动安全峰会(MSS)纪实 开发者自白:我是如何不花一分钱收获230万应用下载量的! OpenCloud 2015报名超预期 近20位讲师会前采访提前看 在爱情方面谁能做到这一点? 谁有 file cutter v1.4的注册码? 有急用! 搞一个专业的VC程序员基地~~~~~~谁愿意加入????? 最新发现:原来C++Bilder的项目文件(.bpr)是XML格式的! 关于FAT32和NTSF的问题 如何用VC实现Email的发送? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了! 搞一个专业的VC程序员基地~~~~~~需要网页制作高手!! ADO 的用法 m_pRecordset->Fields->GetItem(index)->GetName() 关于CRichEditCtrl的问题之二,取的当前可见行数? 请问在哪里下载IMAIL SERVER???各位帮帮忙!!! 高手请回答,ADO和BDE到底有什么区别,你选择谁?为什么? 高分求教!!!!!!!!!!!!!!!!怎样得到局域网上所有的机器名?(普通WINDOWS网络,用VB?,好象用WNET API可以的) 如何安装com.ibm.bridge2java.*这个包阿? 有人吗???求救! 你也许也会遇到这样的问题? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!!! 大虾看过来. 一个access表一万条记录,想转到Mysql下(Mysql在Linux下)用什么方法和什么语言来做好? rs.CursorLocation=aduseclient是什么东西? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题! 简单SQL,免费送分! 用ASP如何上传文件,可以用组件。 谁知道怎么改运行中的程序的托盘图标???我用SysTray.ocx不能改? 新手提问,简单题目,大量给分~~~~~~~~~~ 如何使用getdispatch(), 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!! 关于在一个窗口中的多个数据窗口的问题 扔块砖头, 开个场子 。 ( yeti_lee ) 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了? To: baicolt(五岁的小新是我师傅) 有没有人用过Jcreator 如何在sql server 的查询分析器中用sql语句转到另一台机器上的数据库,同样了sql server的 是不是MSHFlexGrid的bug? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了?? 这个错误类型是什么意思? 如何能够简单的得到昨天的日期? NetBios-SSN是什么? 怎样得到局屿网上所有的计算机名,我想给班里写个局屿网聊天程序,原想用DX8,但DX8好想建立的连接都是C/S模式的。如果能得到机器名就可以用WINSOCK写了(用VB写) 请问诸位有没有什么自动生成源码注释的工具,可以产生函数说明注释和类说明注释 数据库连接这种是什么错误? TStringList *p 定义为一个两维数组怎么做? 在VC++6.0下编程,有什么办法可以获得所有的窗口的句柄??? 如何纪录当前的ID 凡是繁体字的帖子是不是港台同胞发的? 在ASP中,怎样可以删除一个在硬盘上的的文件????? 有人知道下面情况怎么实现吗? JDBC插入2000个字符到Oracle字段中的问题 凡是繁体字的帖子是不是港台同胞发的?。 pb中的pfc类库如何调用? 如何得到当前WINDOWS的进程??以及线程??? 不锈钢管的计算公式按每米报价 一卷100克的无纺布大概多重 我知道一卷是200米,重量不知道有多重 在为灾区捐款捐物活动中,小明也捐了5元零花钱,虽说不多,但____.歇后语, 矩形钢管每米价怎么算已知一种矩形管价格是5300每吨 问每米价格是多少 100斤铁重还是100公斤(200斤)棉花重……纠结 小明和小刚都积攒了一些零用钱,他们所积攒钱数的比是7:4.在支援灾区的活动中,小明向灾区人民捐款了22元钱,小刚捐赠了10元钱,这时他们剩下的钱数相等.小明原有多少钱. 304不锈钢管价格去哪里查询价格啊? 怎样适当给小孩零花钱? 在向灾区捐款的活动中,小亮捐款了零花钱的25%,小东捐了零花钱的20%.小亮捐的零花钱一定比小东多吗?请通过计算来说明.谢谢各位大哥、大嫂、叔叔、阿姨、大哥、大姐……!设:小亮捐款 针织幅宽1.85M 克重800克,单件用量0.4平方米,件数1000总的用量怎么算 在比例尺是1:40000的地图上,两地相距5厘米,如果在比例尺是1:25000的地图上,两地间的距离是多少厘米 家长如何给孩子零花钱对这个的评价 甲乙两地相距4.8千米,如果画在比例尺是1:20000的地图上,应画多少厘米? 在比例尺1:40000的地图上量得两地的距离是6厘米,这两地中间的实际距离是多少米? 知道纸的吨价克数和重量怎么计算出令数列如:一吨50克正度防近视纸 4000元一吨 计算出有多少令 每令纸多少钱 要求有公式 千吨怎么换算成万吨?如:123456千吨 100000块日元等于多少人民币 克重 门幅 怎么算重量克重150克 门幅155cm 3000米布 怎么算出有几公斤重 1千克棉花的质量与1千克铁的质量比较大小 100公斤铁和100斤棉花哪个重这是见证你们智商的时刻了 每卷收银纸的重量怎么算,知道克重,米数,和宽度 2吨棉花的4分之1和一吨铁的几分之几是一样重的 不锈钢六角管重量计算公式? 1/2'' 和5/16'' 等于多少毫米?怎样换算的?请问怎么划算成毫米? (单价:元/kg)里的kg表示多少?kg等于多少斤? 管子的换算公式从吨换算成每米的重量价钱? 在比例尺是1比8000000的地图上,量得A、B两地相距20cm.两列火车同时从A、B两地相对开出,甲车每小时行110km,乙车每小时行90km,几小时后相遇? 彩钢板 0.5mm,单价8.2元/kg,单价怎么换算成 元/m2急 甲、乙、丙三个小朋友积攒了一些零花钱,甲的存钱是乙的2倍,乙的存钱是丙的2倍,已知甲比丙多存60元.甲乙丙各积攒了多少元? 算布料时,如何把平方英寸算为平方码? 在比例尺是6000000分之1的中国地图上量得甲、乙两地间的距离是17厘米,那么两地之间的实际距离是多少千米如果把它画在比例尺是5000000分之1的地图上,应画多少厘米要算式 克重110克每平方米,门幅1.5米,数量900米,请问怎么换算多少公斤? 一个两位数,个位和十位辶和等于十,如果把两个数的个位和十位数字对调,得到的新两位数比原来的数大一十八,请问原来的两位数是多少,请问怎么算. 天平左边一斤棉花,右边一斤铁,什么时候棉花比铁重? 甲、乙、丙三人共有零花钱123元,已知甲和乙的钱数比是5:4,乙和丙的钱数比是6:7.甲乙丙各有多少零花钱 1亿等于1乘10的几次方 在比例尺是500000分之1的地图上,量得甲乙两地间的距离是4厘米,如果将这段实际距离画在比例尺是2000000分之1的地图上,应画多少厘米?十分钟内. 甲乙丙三个小朋友,甲的钱数比乙多408元,甲的钱数是乙的4倍,乙的钱数是丙的2倍,丙有多少元钱? 多少尺等于一码 在一副比例尺是500000分之1的地图上,量得甲、乙两地相距3.2厘米,甲乙两地的实际距离是多少千米?用两种方急怎么做还有用2种方法来算 1+1为什么等于100000 2510亿等于2.51乘10的几次方? 李明和张月都积攒了一些零用钱,两人所积攒的钱数比是9:5,然后李明花了48元,张月花了20元.这样他们剩的钱数相等,李明赞了多少钱? 1加到100000等于几? 一码等于多少毫米 在比例尺是300000/1的地图上量得甲、乙两地相距12cm,如果画在比例尺是1:4000000的地图上,两地相距多少cm 无纺布克重怎么算出米数? 1兆等于10的几次方?是数学数字上的一兆,等于10的几次方?就是多少个零.那是一兆等于一千? 在一幅比例尺是1:300000的地图上量得甲,乙两地的距离是5.5厘米如果改成1:500000的地图上.甲乙两地距离是快 99999-100000在什么情况下等于1我怎么认为是在算错的情况下才等于1呢 一个十位数各数位的十次方之和等于它本身,这个十位数是?···ABCDEFGHIJ是一个十位数,且等于A的十次方+B的十次方+C的十次方+……+J的十次方,求这个十位数···如果感觉太烦不想算给留下方法 小红和小明都攒积了一些零用钱.他们所积攒的钱数比是5:3,在献爱心活动中,小红捐了26圆,小明捐了10圆,这时他们钱数相等,小红原有多少钱? 宽1.6米80克无纺布1公斤有多少平方米 标题:一斤铁和一公斤棉花 哪个重?别以为很容易.很多人会错. 知道镀锌钢管一吨的价钱,怎样转换成一米的价格,要具体的公式和解释 无纺布35克一米五宽 一公斤等于多少米1.55宽的无纺布。刚刚打错了 一公斤煤等于多少卡谢谢了, 不锈钢管 不锈钢管价格今日不锈钢管信息 不锈钢管价格.任何地方都可以的,给我看看 ,真的很全,全是最新的不锈钢信息 克重40 幅宽2.4米的无纺布1公斤等于多少码 在为灾区人民捐款物中,小明也捐出了自己的五元零花钱,虽说不多,但(歇后语)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn