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

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


IDC:全球有1850万程序猿 4成爱好者在写代码 PHP开发框架流行度排名:Laravel居首 2013年度最强AngularJS资源合集 研发周报:回顾2013、技术栈的选择、开源成趋势 TIOBE 2014年1月编程语言排行榜:Transact-SQL力挫Objective-C 夺得桂冠 IBM:这五个智能技术的发展,将会改变我们生活 一周消息树: 微软的2013,Surface的2014 Amazon CTO Werner Vogels:云和SaaS正在快速风靡全球 “人类先知”Isaac Asimov 50年前的科技预测大多应验了 2014年10大Web设计趋势 Google野心:App Indexing改写应用搜索格局 Cocos2d-x,老牌引擎的新进化 Kingdom Rush创始人专访:游戏与电影元素混搭 超实用的JavaScript技巧及最佳实践(下) 盖茨和鲍尔默或成挑选微软新CEO的最大阻碍 移动开发进阶:触发式邮件深入分析 King.com传奇再续!Farm Heroes Saga强势登陆iOS、Android 2013综述稿:Clojure这一年及大事件 亚马逊AWS vs.谷歌GCE,彪的是价格? 2014,混合云被广泛采用的一年 传微软拉拢厂商推双启动系统手机 用户可选Windows Phone或Android 为什么游戏领域总是“抄抄抄”! 物竞天择、百家争鸣——评OpenStack生态圈 CES 2014:Intel针对可穿戴技术发布多款产品 直击CES:Pebble推金属版智能手表Pebble Steel 为4K智能电视而生:高通推出骁龙802处理器 英特尔首席执行官阐述可穿戴设备新技术及Edison计算平台 设计师如何写出更棒的项目建议 微软以1亿美元收购Parature“知识库” 登陆CES:三星发布智能家庭平台Smart Home CES 2014:GPS供应商Garmin推健康腕带Vivofit 所谓的基础的是什么 识别上网状态问题,请教各位大虾。 再问:请问可以在applet中使用MenuBar吗?(昨天的已经给分了) 统计一下win2000下可以玩的游戏 *.chm文件能作在线帮助吗?在窗体的helpfile、和helpcontext如何设置??? 如何根据列名用object来取出字段,急!!!! 关于箭头在数据窗口移动的问题? 再问个菜鸟问题,showmodaldialog的title怎样控制 javascript中如何取整? ALT和MFC的区别是什么?? 试用DELPHI6,BUG太多了! 我是新手,请问在delphi5中如何建库(orcle和sybase)? 问一个比较弱智的问题 js文件里如何使用另一个js文件里的函数30? 哪位大虾知道可以在哪里下载mpeg-1的codec,谁先告诉有效地址谁先得分!(不给分是小狗!) 可能很菜的问题,送分的问题!! 一个关于CDaoTableDefInfo的问题 ado的问题??求救!!!高分!!! 有关代码重用的问题,对Form的继承。 一个关于CString.Format的问题 学习编程时学图算法怎么学好? 一个很简单的CREATE TABLE语句为什么出错呢?向大家请教! jbuilder5运行需要最低配置 ,傻傻的问 Delphi6的盗版已经到了@_@ 喂,为什么我提问只能给最多37分,原先可比这要多的多 一个关于派生类的问题 关于页面关闭的问题 用new JTalbe(10, 20)创建了一个table,如何设置该table列(column)的宽度 请教一个关于用VC6开发outlook\exchange的问题。急!急! 时间服务器 请问一下,用DBM,如果用户注册的数量多了以后,程序的速度很一般的文本速度比较哪个快 纯数学问题:如何求模逆元? VB中实现进程间通信的方法?VB中的CallWindowProc的用法?VB中如何发送自定义的消息? 请问哪里能免费下载BCB5?下载多长时间没有关系,只要能够正确使用就可以了。 怎样得知CListCtrl中当前选项? 我想从WINME中自带的一个驱动程序提取出来在WIN97中安装,请问应如何做? 菜问题(2) 请教:为何数据库数据无法在网页上显示? CEditView 一定要override onChange function(ON_CONTROL_REFLECT(EN_CHANGE, OnChange))????;否则input 时不我待会错??? 请教:不通过页面,用VB如何得知来访者的IP? 如何将vcd转化为real的格式???????????急!!!!!!!!!!!!!! 对DMO播放内存MPEG2数据没有头绪,谁能给点提示? 支持bestbestbest!!!!!!!!!!!! 如何在win98下使用EJB? applet 可以打开到一个server的socket么 谁知道国内哪有下载jdk1.4,Thanks! 如何配置For Oracle8i 的ODBC? 请教如何动态改变窗口大小 弟兄们救命啊!!!rational rose中mdl的导出 Jbuilder5.rar的密码? 这条语句为何通不过?请指教! 六年级同学向汶川大地震灾区的小朋友捐款3000元 五年级与六年级捐款数的比是4;5 5年纪比四年级少1/6五年级捐款多少?四年级捐款多少?某工厂女职工人数的6/7 正好是男职工人数的3/4 男职工24 学校开展“爱心捐款”,六年级同学捐款1485元五年级同学捐款的钱数比六年级少五分之一,五年级捐款多少元 在一条公路的两侧栽树,每隔5米栽一棵,公路的两端都有树,公路长400米,公路两侧一共要值几棵树? 四川汶川地震发生后,实验小学一年级小朋友纷纷向灾区捐出自己的零花钱,已知一班所捐的钱数是二班、三班两个班和的2/3,二班捐的钱数是一班、三班和的2/5,又已知一班和三班所捐的钱数之 学校把360本科技书分配给甲、乙、丙三个班,甲班的2分之1等于乙班的3分之1,等于等于丙班的4分之1,甲、乙、丙三个班各分得多少本?要算式 在一条长25米的公路一边栽树,从一端起,每隔5米在一棵树,路两边都要载,一共载多少 实验小学为灾区小朋友捐款一班50人共捐款249元.二班48人平均捐款四元平均两个班每人捐款多少元? 七年级甲、乙、丙三个班分别想贫困地区的学生捐赠图书,已知这三个班级捐赠图书的册数为7:8:9.问(1)若三个班级捐赠图书捐赠图书2112册,试问这个三个班级各捐赠图书多少侧?(2)若甲、 一条公路长500米,在路的一边栽树,起点和终点都栽,一共栽了26棵树,平均每隔几米栽一棵? 实验小学为四川灾区小朋友捐款,五年级一班50人,共捐款290元,五年级二班有40人,平均每人捐款4元,两个班平均每人捐款多少元/ 甲乙丙三位同学向贫困地区的少年儿童捐赠图书的册数之比是5;6;9,如果甲丙两位同学捐书册书的和是.甲乙丙三位同学向贫困地区的少年儿童捐赠图书的册数之比是5;6;9,如果甲丙两位同学捐书 一条路长525米,在路的一旁栽树,每隔5米一棵,两端都栽,一共需要栽多少棵树 某小学为玉树地震灾区捐款,已知五年级是六年级的3分之2,六年级比五年级多捐0.36万元,五年级捐款()万算式是什么! 甲、乙、丙三位同学向贫困地区的少年儿童捐赠图书,已知这三位同学捐赠图书册数的比是5:6:9.(1甲、乙、丙三位同学向贫困地区的少年儿童捐赠图书,已知这三位同学捐赠图书册数的比是5:6: 同学们给90米的小路一侧栽树,每隔3米栽一棵.如果两端都不栽树,一共需要多少棵树苗? 光明小学五六年级学生向四川省汶川县灾区捐款数额的比是3:4,五年级一共捐款2400元,六年级一共捐款多少元光明小学五六年级学生向四川省汶川县灾区捐款数额的比是3:4,六年级一共捐款多少 光明小学在六一前开展了为贫困地区的“希望小学”捐赠图书的活动.六一节一大早,满载的图书汽车从校园出了.4小时过去了,校长打电话问随行的大队长,询问有没有到达,大队长说:我们4小 学校有一条长600米的小路,准备再小路的两旁栽树,每隔4米栽一棵,如果两端都栽树,共需要多少棵树苗? 的件数正好是全校的25%,全校共做好事多少件?学校开展学雷锋活动,四年级做了21件好事,比五年级少30%,相当于六年级的75%,六年级的件数正好是全校的25%,全校共做好事多少件? 某小学为玉树地震灾区举行赈灾捐款活动,已知五年级四个班平均每班捐款845元,六年级六个班共捐款7200元,那么五,六年级平均每班捐款多少元 光明小学在六一前开展了为贫困地区的希望小学捐赠图书的活动,61节一大早,满载着图书的汽车从校园出发了4小时过去了,校长拨通了随行大队辅导员的手机,询问有没有到达.大队辅导员说: 学校开展学雷锋活动,四年级做了21见好事,比五年极少30%,相当于六年级的75%,六年级做的件数正好是全校的25%,全校共做好事多少件? 7年级学生为汶川地震灾区捐款共131元,正好是平均每人2元还多35元,则该班学生有多少人? 六年级三个班共有120,六一班是六二班人数的百分之90,六三班是六二班人数百分之110.求这三个各有多少人? 四年级做了21件好事,比5年级少30%,相当于六年级的75%,六年级做的件数正好是全校的25全校共做好事多少件? 5年级学生共为地震灾区捐款900元,其中五年级学生捐款数是四年级的1.5倍,五年级学生捐款多少元? 环保活动中六一班,六二班,六三班,捡塑料袋的比是5:3:4,六一班比六二班多拣了120个,六三班拣了多少 育红小学五、六年级为贫困山区学生捐书660册,其中五年级3个班,每个班平均捐120册.六年级有2个班,平均每个班捐书多少册?用方程解. 深圳某小学在“献爱心—为四川地震灾区捐款”活动中,六年级四个班共捐款4000元.其中一班捐款1000元,二班捐款数是六年级捐款总数的20%,三班与四班捐款数比是5:6求四班捐款多少元? 已知六一班和六二班共81人,六二班和六三班共83人,六三班和六四班共86人,六一班比六一班比六四班多2人,每班各有多少人 2013年4月20日8:02,四川省雅安市芦山县发生7.0级大地震,许多公路由于地震引起的山体滑坡 在"爱心捐款"活动中,五年级同学捐款258元,5倍少12元,2倍多6元. 六一班比六二班多18人,六三班比六二班少2人,六一班与六二班的人数比是5:8,三个班各多少人 数学题:2013年4月20日8时2分在四川省雅安市芦山县发生7.0级地震,有1.8万人等待安置,各地人民纷纷捐款灾区.某市一企业在得知灾区急需帐篷后立即与厂家联系购买帐篷送往灾区.已知用9万元 某小学在爱心捐款活动中,五年级共捐款1038元,2倍少30元,该校这次爱心捐款五、六年级共捐款多少元? 六一班和六二班为四川地震的灾区共捐款8800元,已知六一班比六二班多捐20%,问两个班各捐多少元? 北京时间2013年4月20日8时2分在四川省雅安市芦山县发生7.0级地震北京时间2013年4月20日8时2分在四川省雅安市芦山县(北纬30.3,东经103.0)发生7.0级地震,震源深度13公里. 育红小学三、四、五、六年级参加献爱心捐款活动.其中三年级捐了总数的五分之一,四年级捐了总数的25%,五、六年级捐款总数的比是5:6, 为地震灾区捐款,六一班捐款550元,六二捐款440元...接上——后来六二班王小明又捐了一些钱,这时六一和六二捐款数的比是11:9,王小明又捐了多少? 2013年4月20号,四川省雅安发生了7.0级地震,为了抢救伤员,一架救援直升机从芦山县某镇A地起飞,2013年4月20日,四川省雅安发生了7.0级地震,为了抢救伤员,一架救援直升机从芦山县某镇A地起飞,运 育红小学三、四、五六年级参加献爱心捐款活动.其中三年级捐了总数的1/5育红小学三、四、五、六年级参加献爱心捐款活动,其中三年级捐了总数的五分之一,四年级捐了总数的25%, 请用脱式计算下题:(1) 园林局为了绿化公路,在一段公路的两边每隔4米栽一棵树,一共栽树74棵,现在要改每隔6米栽一棵树.那么,不移栽的树有多少棵?(2)一台机器3小时耕地15公顷,照这样计算 关于雅安大地震的作文450字(多多益善) 三四五六年级参加爱心捐款,其中三年级捐了总数的五分之一,四年级捐了总数的百分之二十五,E三四五六年级参加爱心捐款,其中三年级捐了总数的五分之一,四年级捐了总数的百分之二十五,五 园林局为了绿化公路,在一段公路的两旁每隔4米栽一棵树,一共栽树74棵,现在要改成每隔6米栽一棵树.那么,不移栽的树有多少? 雅安大地震令人感动的事 注意是(子母事件) 作文500字 在一次献爱心捐款的活动中,1班捐款是2班的2分之1,2班捐款是3班的3分之1,3班捐款是4班的4分之1,4个班共捐了7920元,1班捐了多少元 为防沙固土,市园林局沿着一条公路栽树第一棵栽在路的始端,以后每隔50米栽一棵树,要求在路的末端栽一棵,这样就缺少21课,如果每隔55米栽一棵,要求在路的末端栽一棵,这样只缺少1课树,求树 512汶川大地震作文的开头怎么写 在献爱心捐款活动中,光明小学四年级捐款180元,比五年级少捐25%,kuai kuai kuai kuai kuai!xie xie xie xie xie xie 为放沙固土,市园林局沿着一条公路栽树,第一棵栽在路的始端,以后每隔50米栽一棵树,要求在路的末端栽一棵树,这样就缺少21棵,如果每隔55米栽一棵,要求在路的末端栽一棵,这样只缺少1棵树.求 谁有众志成城的(关于日本大地震的)作文开头 在爱心捐款活动中,昆明小学四年级捐款180元比五年级烧捐125元, 在一段公路的两边每隔4米栽一棵树,一共栽树74棵,现在要改每隔6米载一棵树.那么,不栽的树有多少棵?帮帮我吧~教科书的答案是26棵,不知你们怎样做~~~~谢谢!不是不栽,而是不移栽~~~~~sorry~~~拜 关于雅安地震的作文开头结尾 在献爱心捐款活动中,爱心小学四年级捐款220元,比五年级少捐25%, 公路两边栽树,每隔4米栽一棵,共栽74棵,现改成每隔6米栽一棵,那么不要移栽的树有多少棵? 2013年4月20日8时02分,四川省雅安市芦山县发生7.0级强烈地震.某市接到上级通知,立即派出甲、乙两个抗震救灾小组同时乘车沿同一路线赶赴距出发点480千米的灾区.图中的折线、线段分别表示 在献爱心捐款活动中光明小学四年级捐献180元五年级比四年级少捐献了百分之25四五年级一共捐了多少元 在一条长300米的公路两旁栽树,每隔4米栽1棵(两头都栽),一共要栽多少棵树
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn