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

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

专访阿里云总裁王文斌:做出“用得爽”的工程产品 专访AMD全球副总裁潘晓明:2014全线发力,力争中国市场 搜狗开源内部项目管理平台Cynthia意欲何为? 深度解析浪潮新八路服务器TS860 支持Box2D,开源HTML5 2D游戏引擎FLAG 一周消息树:从程序员到架构师的方法与逻辑 【CTO俱乐部走进海尔】海尔的转型探索之路 十一问MongoDB CTO,谈NoSQL人气王的扩展、事务及运维 腾讯“创业•密码”开发者论坛 ChinaJoy引爆创业者关注 从F1赛车到智能手机,无线充电技术之崛起 助力梦想!MDCC免费为优秀App开发团队提供展位 为Symfony2和Redis正名,基于PHP的10亿请求/周网站打造 【聚焦API】教你如何选择最适合的NLP API服务商? 直接改应用!Flipboard开源iOS应用内调试工具FLEX 专访腾讯游戏运营总经理崔晓春:云时代游戏运营的变革与创新 嵌入式专家Bruce Douglass经验谈 门票销售过半 从2014微信开发者大会购票者特征说起 当来自金星的Devs碰上火星的Ops——共话应用扩展 移动平台市场占有率:Android首次赶超iOS 豌豆荚范怀宇 I/O大会总结:Android无处不在 轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒 《近匠》FIR.im:简单易用的内测分发工具 传苹果公司将于9月9日召开新一代iPhone发布会 近百家微信开发商参与征集评选活动 TOP10正浮出水面 Java程序猿,手游引擎怎么选? MDCC 2014优秀移动团队免费展位火热申请中 【微信讲师面对面】你在企业服务号开发中遇到的坑和难点 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务 浅谈Apache Spark的6个发光点 安卓 “假ID” 签名漏洞,竟然骗过了支付宝和360 从Social到Big Data,移动App蚂蜂窝转型推新品 CRegKey::QueryValue()读取数值数据时遇到的问题…… chmod命令后造成启动错误 请教大家一个关于webservice transaction的实例 菜鸟急救,注册表文件导入的问题? 填空题(急) 钱本草呢? 关于手机的问题 求救:GetFieldValue()函数出错. 一个很简单的问题,来者有分 有个小问题请大家诊下 怎么样使stringgrid中的fixrows和rowcount数目一致? 如何在JB中联接SQL数据库! 把数据结构(比如说一个链表里的数据)保存为文件,不用序列化怎么办啊? 哪位大哥有installshield的安装password? 日期型中的“年”,如何取得? SOS!!!! COPY文件有哪些办法?用什么方法比较好? 友元函数重载操作符@obj,被c++编译器编译后被解释 对vcl库底层机制一些不明白的地方2 存储图片为什么不行? 真的很苦恼,如何同时更新两个文件? 数据库问题,大家帮帮忙啊 asp.net连接sqlserver 关于在同一asp页中的两个select的问题 如何写这种存贮过程?(急) 哪儿有asp的帮助下载! 关于数据库连接方法的问题! -----------产生错误:线程正被中止。--------------- 我刚刚学了C#,但是不知道自己的程度 如何在点击Memo时取得当前行的值? midas的一些问题! EditPlus 2中如何实现对java编译和调试?立刻给分 为什么在 CHtmlDialog 中映射的html button click 的事件会促发两次? 广州一戒毒所将数十戒毒女卖给“鸡头” 菜鸟级问题。看到有很多视图的列有带链接的。不知道怎么做。怎么看链接 为什么安装Windows 9x,要选FAT32分区类型,而如果安装Windows 2000/NT/XP系统,就必须要选NTFS类型,这两个类型有什么不一样吗? 各位大哥好,问Email问题 哪位仁兄告诉我,Windows写驱动主要用什么工具呀,(包括调式驱动) 学校期中考试的题目 treeview问题,请问在.net中该事件如何写 如何运行servlet? 表里面有几千条带扣的字符串需要将扣去掉。 能否解释一下,如下一些东东。 〔绝对给分〕几个问题! 用PHP的GD库可以输出png图片,如何在用户浏览的时候同时将图片保存一份到服务器上? 更换操作员应该怎么做,谢谢! JAVA优于C++ 怎样修改桌面图标 char转换numeric出错 如何实现自动登录?必送分! 安装j2sdk-1_3_1_07-linux-i586.rpm.bin失败!!!!!!!!!!!!!!!1 床底下放个门 有谁知道 有什么说法吗?有谁知道 有什么说法吗? 为什么欧盟无法当今世界主要的政治力量,希望详细说明、希望能从欧盟体质发面,具体谈谈、 葡萄糖对年轻人有什么好处 -风扇扇风风吹扇扇动风声 下联?请对出 风扇扇风风吹扇扇动风声 下联! 《记承天寺夜游》练习1、记叙文一般具备六要素,请你将《记承天寺夜游》一文的六要素写在下面的横线上(1)___________ (2)______________ (3)________________ (4)_______________ (5)________________ (6)_______ 叶圣陶先生说的什么?是解读文章的一把钥匙 地窖可以保鲜吗 生物圈是由_和_构成的,填空 大家帮帮我!请问你读过叶圣陶的作品有___(任写一部)请自选角度,简要评价一下你所读过的叶圣陶的作品.(100字左右)!急! 下雨天闪电能玩电脑和手机吗 观书有感(二)这首诗读后能联想到哪些读书体会一定要二 logaX×logaY等于多少 本人是单细胞生物,你告诉我吧! 东西流向的河流,向西流时,南岸侵蚀,北岸沉积;向东流,北岸侵蚀,南岸沉积.为什么啊. 左溢world of our own歌词 单细胞的危害、快 什么力使分子汇聚成堆,从而组成物质? logaX+logaY=logaXY吗? 屏息凝神怎么造句 说出生物圈各组成部分的具体情况 为什么给直导线(铝棒)通电,观察到直导线运动起来?不是铝棒不能被磁化, 用“屏息凝神”造句 ______是生物圈中最基本和最重要的组成部分为什么答案是绿色植物而不是生产者呢?我觉得生产者要比绿色植物更准确一些. 我爸是乙肝患者,最近检查酶高,葡萄糖也高,葡萄糖值8.4,就想知道葡萄糖高是什么原因我爸是乙肝患者,检查时候有时酶正常,有时会高,可最近检查葡萄糖高,想知道原因 用难堪 屏息 诡异 模糊造句 用这四个次连词成段 生物圈的范围分哪三部?各部分由什么组成? 为什么长江右岸是南岸,左岸是北岸,怎么区别,求方法 兴奋在神经元之间的传递与糖蛋白有关系吗? 生物圈有那几个部分? 8306:某一元醇在浓硫酸作用下加热到170摄氏度可以生成丙烯,该一元醇可以是什么呢?是不是只可能是CH3CH2CH2OH呢?请问应该如何思考呢? 黄河流经四川没有? 生物圈包括哪几部分 江的左岸、右岸是如何划分的 为什么黄河和长江都绕开了四川盆地,而没有进入四川内部呢? 洋葱炒什么?想要简单点的 有支链的丁醇在浓硫酸的作用下加热反应,只生成一种烯烃的结构简式 生活中,有很多事并不是想象的那么坏,只要肯动脑筋,坏事就会变好事的,举几个例子 中国哪个沿海城市环境最好 如果你是一位投资决策人,你认为在长江堤岸加固时应重点加固河流的左岸还是右岸?为什么?急!是地理题 习作:好多事情并不像我们想象的那么糟. 只要肯动脑筋,坏事往往能变成好事.在生活中,你一定也遇习作:好多事情并不像我们想象的那么糟. 只要肯动脑筋,坏事往往能变成好事.在生活中, 什么函数的倒数等于e^-x 详细点 英语翻译麻烦也翻译歌词~ 用蓬勃、 灵敏、 炫耀、 骇人听闻、 随声附和 、神通广大至少两个词语造句 叶圣陶老先生写过什么文章?写过什么呢?我怎么也想不起来! 把一只狼,一头羊和一篮白菜从左岸带到右岸,一次只能带一样,狼吃羊,羊吃菜,猎人怎样才能到达目的地? 用随声附和、飘渺、莽莽榛榛造句50字左右 若0 有1只羊,2只狼,2堆草,2只老虎,1只牛,一辆船,要用船把它们全部都运过,每次只能运2个,而且它们要互相不吃!怎么运! 苏轼的诗的特点 已知LOGaX+LOGaY=1,求X平方+Y平方-2(X+Y)的最小值 为是么不能发明永动机呢? 形容肯动脑筋的成语! 若0 现在永动机也没有被发明出来 用屏息凝视造句 已知0 永动机不可以被发明吗 和 组成.有 ,(包括和 组成.有 ,(包括 ,,,) 已知0<a<1,0 <x ≤y <1,且logax×logay=1,那么xy 永动机为什么不可以被发明 湖南3公务员偷拍县委书记获刑 关键视解放军侦察船抵近夏威夷 为进入第三岛印共领导炫富被开除 印共领导指其不道苹果公司发布新一代iPad等产品英国乔治小王子受洗仪式23日举行 不浙江抽查M15甲醇汽油合格率80%中美工商领袖和前高官第五轮对话在美举日外务省网上传视频主张独岛主权 韩严日本民主党代表用“四面楚歌”形容自己美国校园枪击案枪手曾遭欺凌 开枪或为美国载175人客机因引擎故障紧急迫降沙特拒安理会席位 美国作说客寻与沙特澳报:沙特拒安理会席位系赌气?印度妇女盛装庆祝传统\"女人节\"纽约杜莎馆迎万圣节 大师雕刻南瓜版L美国企业研发氦气球游大气层 每人旅费欧盟要求乌克兰履行入盟条件 季莫申科美俄官员将会晤联合国特使 助推叙问题经合组织要求巴西实施结构改革联合国副秘书长:巴以实地局势动态令人综述:就业数据黯淡或拖延美联储“退出瑞士库德斯基董事长:李克强的讲话有很上海大师赛连续4年获ATP最佳 观赛从“三次进城”审视“赶考”精神开城工业园区重启日期确定 入驻企业筹埃及旅游部推出新举措重振旅游业(图)中国最早的笑话集打造金色腕表混搭风格用镜头追忆“杜立特”行动(图)CPI数据是跑断腿跑出来的(图)农交会本周开展 第二展区很精彩黄花村里的孩子们上学方便了合肥住房保障可在线申请校地同声共唱家园(图)面条加工店突发大火 8个消防栓滴水不合肥将对湿地进行“普查”长期失业没钱买中秋烤肉用品 男子企图不当“女土豪” 豹纹怎么穿上档次?上官婉儿葬于“贵族区” 形制不简陋当你的领导比你年轻韩国列全球幸福国家排名榜第41位工商银行泉州分行全力拓展手机银行 搭
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘