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

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


【走近院士】李兰娟:云计算与大数据将成为医疗改革利器 迭代不等于学习,聚类分析也不等于机器学习 Office大肆杀戮,已攻下Chrome Web Store Bug都补好了?Google发布Android 4.4.3更新 微软被传收购Xamarin 强势推进移动新战略 挑战传统金融业务 Facebook进军移动支付领域 亚马逊AWS需解决的五项问题 腾讯自曝:大数据平台的秘密 继Cloudera之后,MapR宣布对Spark的完全支持 企业实施商务智能的6个致命错误 《近匠》HBuilder:如何用JS调用几十万原生API? littleBits新推Cloud Module,普通人也能DIY智能硬件 如何创建浮动式标签模式? Office 365正式落地中国——移动为先,云为先 .NET Native:C++的性能 C#的产能? Arduino联合创始人Tom Igoe:创客,因何而创 【走近院士】高文:多媒体大数据的影响及面临的挑战 微软SQL Server 2014三大新特性:集成内存OLTP、BI和混合云搭建 Linux将会统治桌面端的7个原因 Intel首席科学家Randolph Wang:详解Edison AMD Mantle再添新作,引发下代GPU架构猜想 谈DAM决策,自建还是SaaS 证据显示:Linux战争已经转移到OpenStack RestKit:iOS开发必备,告别众多无聊代码 技术新突破:手机和平板可远程控制PC,Chrome Remote Desktop亮相 物联网高速公路上,快数据如何驱动分析 苹果或将使用雅虎的搜索引擎,抛弃谷歌 百万用户规模的系统如何扩展 大数据需要软件定义存储 倒计36小时!2014中国Spark技术峰会即将召开! 设计师专宠,Startup强大的UI设计框架 CWnd很少用,有些地方弄不明白。 我的Flash做了一个banner468*60,可是,放在网页上之后,超出了这个范围之内显示,怎么办,那样会很难看的???哪位能帮帮我呀?? 怎么样捕捉SQL-Server的错误 请解释:VC6环境的自动完成功能在什么情况下会不起作用??? 请问Delphi的控件只有bpl、dcu、res、frm,在BCB中怎么使用?谢谢! 怎么把數據寫入.dbf中!!!!!!!!!!!!! 为什么不能在WIN2K下运行?? help!! 哪位高能告诉我怎么做? 头文件怎么写? 有人知道split函数的详细用法吗,各个参数的意义? 真的有所谓的第四种情感吗????? 请问怎样在HTML的编程环境下,能直接读取到JPG和GIF图片文件的高度和宽度(用pixel表示)? 有没有与msxml4.0有关的基础性的文章? ---> 服务器端和客户端软件同时写一个数据项产生冲突,如何解决???急急急 <--- 为什么我的函数声明编译出错 com中如何创建非可视组件实例 有关程序员考试的问题,请大家帮帮忙!!谢谢! session 问题 如何实现文件夹共享 如何用系统监视器查看远程的计算机的系统运行情况? 为什么这段代码不行啊?? 上INTERNET时,如何得到本机拔号IP地址? 多进程使用单值信号量协调,设置 SEM_UNDO, 执行semop 时返回 errno = ENOSPC,如何解决 多进程使用单值信号量协调,设置 SEM_UNDO, 执行semop 时返回 errno = ENOSPC,如何解决 如何用asp连接db2数据库,请附带源码(急) 高分求救 我下载了一个linux2.4.6正式版内核,它是作什么用的?一定给你分,帮帮忙! “神舟三号”飞船发射成功 巨简单,可是俺不会! 上INTERNET时,如何得到本机拔号IP地址?(非局域网IP) 请问如何在DBGRID的TITLE部分,添加自定义按钮或者图像等 多进程使用单值信号量协调,设置 SEM_UNDO, 执行semop 时返回 errno = ENOSPC,如何解决 哪位大侠知道SQL server 里面的updatetext语法怎么写? 两个问题,十分简单,万望指教 偶是新手。要用到sybase数据库,但是只有PB8光盘,听说这上面只有客户端…… 哪里可以找到delphi的函数原型??回者高分伺侯!!!!!!!! 如何将数据邦定到DropDownList控件?(十万火急) 在CB中delete data[] 与delete[] data 有何不同? float 类型 的用法问题(很值得注意呀!!!!!!!!!!!!!!!!!!!!) 在BCB中的Edit菜单下有Tab order,如何才能正确的使用呢?(附详细内容) TWebBrowser 容器中,我发现居然不能拷贝其中选定的内容.为什么,那里出错了吗? 大型表的更新问题 请教:在按页滚动的记录集中怎样得知当前记录所在的页? 谁有2002年度mcse考试试题? 再贴程序员征婚照:) 在线的进来问点问题(jsp/javabean), 实在没有分了其它帖子中送出 请问哪里有介绍用Delphi开发类似Foxmail邮件程序的文章 讨论一下怎么看别人写的代码吧 有个BC源程序用了BC下特有的类complex类,怎样做才能在VC下编译通过? VB高手请进来!!!! 质量为1kg的木块A放在质量为4kg置于水平面上的木板B的右端,木板B的长度为1米,质量为1kg的木块A放在质量为4kg置于水平面上的木板B的右端,木板B的长度为1米,上下表面的动摩擦因素都是0.4.(1 小明的体重是30千克,是他哥哥体重的5/6他哥哥的体重是他爸爸体重的1/2它爸爸的体重是多少千克? 重量是4kg的木块,放在水平桌面上,运动时受到的摩擦力是木块中立的0.2倍.(1)要使木块在此水平面上以0.2m/s匀速直线运动,需要对木块施加多大的压力?(2)要是木块在此水平面上以0.5m/s匀速 请问电梯称重是怎么回事呢怎么称重呢亲们 秦皇岛哪里有卖这个产品的呢 小明的体重是48.6千克小华的体重比小明体重的六分之五还少2千克�� 在桌面上推一个小木块,当木块的中心正好推到桌子边缘(一半在桌子上一半悬空),木块会掉下去吗? 高一数学必修1的函数及其表示听不懂,怎么学 这几款衣服比较好看 本人身高1.69 体重60KG 请大家给点意见 装修材料都有哪些种类? 高一数学必修1函数及其表示设二次函数f(x)满足f(x+2)=f(2-x),且f(x)=0的两实数根平方和为10,f(x)的图像过点(0,3),求f(x)的解析式 一长轻质木板置于光滑水平地面上,木板上放质量分别为mA=1kg和mB=2kg的A、B两物块,A、B与木板之间的动摩擦因素都为μ=0.2,水平恒力F作用在A物块上,如图所示(重力加速g=则:( ) A.若F=1N,则物块 10项室内装饰装修材料国家标准是什么? 高一数学必修一函数的基本性质当x∈[0,1]时,求函数f(x)=x的平方+(2-6a)x+3a的平方的最小值. 小明前年体重为40千克,去年减轻了10分之1,今年又增加了10分之1,今年体重是多少千克? 某同学身高1.80m,质量为65kg,站立举手达到的高度为2.20m,设他蹬地的力的大小恒定为1060N,求他的重心下降多少米开始蹬地才能摸到2.65m的高度 一个梯形的面积是15平方厘米,上底是4.5厘米,高是3厘米,下底是多少厘米?列方程 小明今年的体重是48千克 某同学身高1.80M,站立举手达到的高度为2.20M他起跳后能摸到的最大高度是2.60m,问他的起跳速度是多大?我就是想问,列了方程以后,(Vt)²-(Vo)²=2gS,居然解得V0的平方是负数,按理说,设竖直向 木板质量为M,长为L,放在光滑水平面上,一细绳通过定滑轮将木板与质量为m的小木块相连M与m之间的动摩擦因数为μ,现用水平向右的力F将小木块从木板的最左端拉到最右端,拉力至少要做多少功 MA=2kg的木板在光滑的水平面上以2m每秒的速度向右运动,t=0时,mb=1kg的铁块以va=1米每秒的速度水平向左滑上木板.b于a之间的动摩擦因素=0.1,若b刚好没有滑出木板,则板的长度至少为多少?整个过程 放在斜面上的物体,所受的重力G可以分解为沿斜面向下的的分力G1与垂直斜面的分力G2,但斜面增大时A.G1减小,G2增大 B.都增大 c.都减小 DG1增大,G2减小 在某星球表面水平放一长木板,木板上放一木块,木块质量为m,木块与木板间的动磨擦因数为μ,用弹簧秤水平拉木块,读数为F时,木块可匀速直线运动.该星球半径为R,引力常量为G.(1)星球表面的 地球上重1千克的物体,到月球上大约重0.16千克.一位宇航员在月球上重11.52千克,他在地球上重多少千克 装饰材料前景如何?什么类型的装饰材料,会更好些? 重力是物体由于地球的吸引而受到的力,施力物体是( ) 失去重力时会出现的现象是( )( )2个互相接触的物体,当他们( )或( )时,在接触面上产生一种阻碍( )的力叫摩擦力 1.梯形ABCD中,AD//BC,角ABC=60°,BD平分角ABC,BC =2AB,求四边形ABCD是等腰梯形. 谁知道装饰材料中金属装饰材料的种类及特点?我对这些不懂, 如图所示,水平地面上匀速运动的小车的支架上有三个完全相同的小球A、B、C,它们的高度差h1=h2,当小车遇到障碍物D时立即停止运动,三个小球同时从支架上水平抛出,落到水平地面上的位置如 梯形ABCD重,AD∥BC,AB=CD,AV⊥BD,若AD+BC=4√2cm,求(1)对角线AC的厂;(2)梯形ABCD的面积再不好意思,太心急打错字。梯形ABCD中,AD∥BC,AB=CD,AC⊥BD,若AD+BC=4√2cm,求(1)对角线AC的长;(2) 装饰材料类型中的金属装饰材料的种类及特点有哪些? 做数学题时怎样克服粗心大意的毛病 高一物理运动和力 如图所示,物体A被压在物体B和水平地面之间,B用绳拴在墙上,A、B的质量分别为如图所示,物体A被压在物体B和水平地面之间,B用绳拴在墙上,A、B的质量分别为10kg和30kg,A与B及A 梯形ABCD,AD//BC,对角线AC,BD相互垂直,且AC=8,BD=8,求梯形的高? 如图所示,质量为m=1kg的小滑块(可视为质点)放在质量M=3.0kg的长木板的右端,木板和木板和右端之间的动摩擦因数u1=0.1,木板与地面之间的动摩擦因数u2=0.2,木板长L=1.0m.开始两者都处于静止状态, 一个物体在足够大的水平地面上做匀加速直线运动.一个物体在足够大的水平地面上做匀加速直线运动.从t=0时刻开始,物体的加速度与时间的关系如图.求十秒内物体位移大小.图像(at图像)就 设曲线y=ax3+bx2+cx+d(a<0) 以原点为极小值点,函数图像过点(1,1) 用a表示函数的极大值 做数学题经常粗心大意我做数学题出心大意,怎样改掉这个习惯,分式化简了,忘写次方,是不是不够专注啊?题目本想来选C却选作A,几乎没有时间检查,做完就快交卷了 一个直角梯形的周长是48米,两底之和与两腰之和的比是2:1,已知一条腰是另一条的3/5,求这个直角梯形的面积. 下列句子中的省略号起什么作用?①表示心理活动的时断时续②表示省略递增的次数③表示语意的跳跃 ④表示说话结巴,欲言又止1.是他来啦?……不,还没来!……为什么把他们报过来 m=1.0 kg的小滑块(可视为质点)放在质量为M=3.0 kg的长木板的右端,木板上表面光滑,木板与地面之间的动摩擦质量为m=1.0 kg的小滑块(可视为质点)放在质量为M=3.0 kg的长木板的右端,木板上表面光 14,(解题疑问)如图所示,质量为M=4kg的木板静止在光滑的水平面上,在木板的右端放置一个质量m=1kg大小可以忽略的铁块,铁块与木板之间的摩擦因数μ=0.4,在铁块上加一个水平向左的恒力F=8N,铁 一个质量为70kg的人在电梯中用体重计称重,发现电梯静止时,体重计读数为( )N当电梯以a=g向下做匀速加速运动时,读数为( )N;当电梯以a=g向下做匀减速运动时,体重计读数为( )N(取g 我的女儿做数学题时老是粗心大意,该怎样帮她改掉这个坏毛病 帮我解决一道物理题(某同学身高1.80M,质量65kg,站立举手达到2.20m,此同学用力蹬地,经0.45S竖直跳起,设他蹬地的力的大小恒定为1060 N.计算他跳起可摸的高度?(g=10m/s2) 电梯里放有一个弹簧体重计,质量为60kg的人站在体重计上,求下列四种情况中体重计的读数1.电梯不动或匀速运动2.电梯以2m/s2,的加速度匀加速上升3.电梯以2m/s2,的加速度匀减速上升4.电梯做自 我做数学题时总是粗心大意,帮我推荐一本很难的数学题,里面的题有很多陷阱的哪种.还有一本是经典题型的 小明去年体重55千克今年增加2又5分之1千克小明今年体重是多少千克要过程10分钟内急 一个质量为70kg的人在电梯中用体重计称重,发现电梯静止时,体重计读数为( )N(取g=10N/kg) y=Asin(ωx+ψ)中 A表示纵坐标伸长或缩短A倍 ω表示横坐标伸长或缩短ω分之一倍 ψ:向左或右移动.那么y=Acos(ωx+ψ)图像变化和sin一样的道理,还是有所不同,不同在哪里,说明清楚听听例题: 子弹以速度V射穿一块木板后速度变成7/8V,它还能再射穿同样的木板几块? 我身高166厘米体重55千克算很胖吗?要多少才合适?我身高166厘米体重55千克算很胖吗?要多少才合适? 在长度为a的线段内任取亮点将线段分成三段,求它们可以构成三角形的概率 跳起摸高是现今学生经常进行的一项活动某同学身高1.8m,质量65kg,站立举手达到2.2m高,他用力蹬地经0.4秒竖直离地跳起,设他蹬地的力大小恒为1300N,则他跳起后可摸到高度为多少 已知集合M={x|2x2-3x-90},求(1)M交N(2)M并N 高一数学必修三知识求助,谢谢……在0~1之间任取2个实数,平方和大于1的概率是?为啥? 将横截面是正方形,长是50cm的长方形横截成3段后,表面积增加了36cm的2次方,原来这个长方体的体积是多少! 不等式组{x-y+2>=0;x+y+2>=0;2x-y-2所确定的平面区域是记为D,不是0,上面写错了。 已知样本 99,100 ,101,X,Y ,的平均数是100,方差是2 则XY=? 某同学身高l=1.80m,质量m=65kg站立举手达到2.20m,假设此同学用力蹬地时力的大小恒为F=1060N,求他的重心要下降多少米开始用力蹬地才能摸到H=2.65m的高度? 一个木块由桌面边缘推出一半的时候,对桌面的压力大小会有什么变化
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘