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

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


WebKit华丽转身:欧朋浏览器8.0新鲜出炉 分析师称应出售Bing?除非微软倒闭,否则不可能卖Bing Go Mobile沙龙第二期:软硬整合与创客精神 专访西电黄宝林:《基于GPU的并行NMF网络聚类算法》获奖背后故事 友友姚宏宇:用C,C++和Java实现自主研发之后,放开心态迎“高朋” 新技术对传统学科的颠覆:系谱网使用大数据寻亲问祖 IDC:2015年全球平板电脑出货量将超PC Web开发者的福利 30段超实用CSS代码 库克出席D11科技大会:苹果公司没有陷入麻烦 千兆的带宽是不够的,最新研究将我们带入400G时代! 告诉你一个事实:移动互联网依然不大 一切才刚刚开始 戴尔的10亿美元云扩建计划到底是什么? iOS vs. Android,应用设计该如何对症下药? 扁平化设计五大原则 16种折磨开发者的方式 2013年度中国优秀开源项目征集活动正式启动 技术趋势:产品设计向“钱”看 服务器领域:旧时代已过 新时代正在降临 速度与金钱的碰撞:F1赛车将搭上大数据的东风 中国&#183;北京第一届开源大会Hadoop专场侧记:Hadoop已经成为大数据分析平台的标配 Marissa Mayer为何带雅虎重回门户时代? 开发者最爱的三款开发工具 Facebook开源JavaScript库:React 硬件天堂深圳行:从Seeed Studio、Knewone到柴火创客空间 消费应用开发难赚钱?做个企业app store吧 开发开源软件的智慧:够简单,很好用 历届中国云计算大会PPT集萃(终章):架构到实践的全面解析 透过现象看本质:详谈数据可视化 专家观点:HTML5无法彻底抹杀Native应用 Google地图工程主管Raj Shah跳槽至微软在线服务部门 微软证实Windows 8.1引入类“开始”按钮 系统6月26日开放下载 请问各位高手,java项目经验主要包含什么东西? 如何判断一个线程已经处于死循环或不响应(即系统CPU占用率高达98%以上)?求助!!! 救我啊!想在局域网的网关机上监控其他机器发出的http请求 怎样快速选取checkbox 请问怎么把几个txt文件合并成一个文件,急!!!!在线等待 关于在广州建立《江西老乡在广州的备忘录》倡议书! 关于程序编译的问题!!!! cast问题 一个简单问题? 怎样删除多条记录,象邮件系统中的删除邮件的操作? Bof或Eof有一个为真,或者当前记录已被删除,请问MDAC2.5哪有下载? 请教:oracle 7.4.3 触发器的错误处理 .htm传递参数! 一个比较菜的问题,我的VB6中窗体的name属性没有,请问怎么加入. 简单sql语句求助!!! 如何在vc++中获得当前用户的用户名? 為什麼在我機器上建立與其他機器的oracle連接的bde出錯???連sql server都沒問題,破oracle真亂!!!!! 真气人 急,用TADOTable控件怎么对字段进行查询?请举例说明!谢谢! 用fireworks 4.0制作动画,请问怎么样用一张图片做背景? 在用VC调DLL时报错,error C2171: '*' : illegal on operands of type 'int (__stdcall *)(char *,char [])'怎么办? 一个打包的问题 在表格式的数据窗口中显示image的问题??欢迎讨论,拒绝灌水! 128MB内存跑BCB6好像有点那个? 请问有人知道哪儿有打印条码的源程序吗? 有关INSERT 插入数据到ACCESS 数据库,为什么出错,急,急,急,菜鸟请教,马上给分 vb.Net的较大的Project编译时,经常出现某些.resources文件找不到,为什么?气死人了! 我很菜,望高手帮忙! 小毛头毕业分在工程部,望个为师兄指点应该注意些什么? Java Applet 中变量的问题请教. 这儿看看! 请帮忙看看这是怎么回事? TRIGGER 请问热心人帮帮我这个热心的学生. 如何安装acm控件 到底应该先看VC++技术内姆还是先看MFC深入浅出? 请问如何使打开的窗口在屏幕正中间? 怎样产生一个全局唯一标识ID? 双套超级查询器!!!上传完毕!!! WINSOCK控制问题 编译时出现这中错误提示是什么意思?怎么解决? 请各位热心人帮帮我这个热心的学生. 100分求助。在无向图(图中有闭合的点集)搜索给定两点之间的所有路径。 调用中文输入法,程序如何实现 VS.NET安装:小弟实在是愚笨 怎样添加DNS服务包?? 100分求助。在无向图(图中有闭合的点集)搜索给定两点之间的顶点。 VS.NET安装:小弟实在是愚笨 这样在Java调用Excel程序 如何在nt4.0下查看本机器装了哪些硬件(鼠标,键盘,显示器,图象采集卡等信息) ####VB初学者的小问题,散分100!!##### 围绕 中国梦---阳光下的成长 为题 (儿童诗) 自创 (cosa/1+sina) +(1+sina)/cosa半夜在做数学 帮忙化解一下(cosa+cota)/(1+sina)帮化解一下 顺便问一下 以后题目里有cota 的怎么办 《画鸡》唐寅全文的解释 这道定积分的题怎么求呢? 若sina+cosa=1 则sina-cosa的值为 唐伯虎什么画得最好? 这道定积分的题怎么做出来的 已知a是第三象限的角,化简根号下1+sina比1-sina-根号下1-sina比1+sina (1-sinx)/cos(x/2)-sin(x/2) x趋近π/2求极限 谁知道海洋变色龙是哪两种动物啊?听说海洋变色龙是章鱼和乌贼 我搞不清楚, 已知a是第三角限的角,化简根号(1+sina/1-sina)-根号(1-sina/1+sina)写过程 怎么用matlab拟合极坐标曲线物理实验数据处理作图 现代码如下:theta2=linspace(0,2*pi*35/36,36);i1=[192,185.5,173,149.9,109,87,50,30.9,10.2,4.9,10.4,26];i2=[58,85.5,118.5,151.6,161.5,159.2,192.3,159.1,161.6,124.1,111.4,74];i3=[4 求邓小平文选读后感,800字左右,最好是原创, 球体体积怎么算? 球体的体积怎么算啊?为什么?还要告诉我原因滴 求《鲁宾逊漂流记》读后感,1500字左右1500左右的《鲁宾逊漂流记》读后感急用O(∩_∩)O谢谢 已知A是第二象限的角,化简根号下(1+sinA)/(1-sinA)-根号下(1-sinA)/(1+sinA) 求形容唐伯虎句子或者诗句就像“风流倜傥”之类的词语或者诗句,要尽可能多一点,经典一点的!最好是对他的绘画、书法等评价的词语。 《我是90后》读后感 1500字左右, 秋水接天三万顷的意思是什么 唐寅的诗句注解头上红冠不用裁,满身雪白走将来;平生不敢轻言语,一叫千门万户开. 读后感1500字左右 秋水共长天一色中“长天”是什么意思?同题,“长天”二字是动词还是名词,什么意思?谢谢大家。但是我主要是想问“长天”两字该当如何理解。 印刷厂装订车间的工人装订了230本书,每25本打一包.再装订多少本又可以打一包? 夏至未至读后感1500字左右 秋水共长天一色的上一句是什么? 已知A(2.0),B(0.2),C(cos a ,sin a),且0 关于快乐成长的诗!关于快乐成长的诗(能念三分钟左右就行了)急啊! 秋水共长天一色 已知α,β为锐角,且(1+sinα-cosα)/sinα·(1+sinβ-cosβ)/sinβ=2,则tanαtanβ= 英语翻译对其中的字要逐个翻译 小石潭记的原文翻译谁知道 做梦梦到好多蜘蛛~是啥意思? 若sinA+3cosA=0,求sin(π+A)cos(π-A) 毛泽东读书的名言警句 红领巾象征着什么? 已知a属于(π/2,π),且4sina=-3cosa,求cos(a+π/4)/sina的值 毛泽东的读书名言20条 已知@,p均为锐角,且cos(@+p)=sin(@-p),则sin@-cos@=? 2sin^a-cos^a+sina*cosa-6sina+3cosa=0啊这个式子怎么分式因解?就是把它变成两个积的形式:如A*B=0的样子? 关于毛泽东读书的名言警句10条 红领巾象征着什么啊请答出来 描写山的比喻句不是用山比喻什么,要八句 求证cos(2分之3π+a)=sina 化简 根号下(1+sina)-根号下(1-sina)a为第一象限的角 请用一个比喻句描写你喜欢或熟悉的一座山的景色. 邓小平文选读后感 3000字左右 球体的体积怎么算?比如说现在有个6立方的球体,怎么来计算它的直径和半径?附上计算公式.写明白些,本人小学都没有毕业 什么成语里面既有马虎这个词,意思又是形容马虎的?是个成语,成语四个字,字里有“马虎”,意思还是形容马虎的! cos(a+π/6)=-4/5 sina=? 请问这个电路原理图用什么软件的画啊如图,有谁知道这个图是用什么软件画的,感激不尽 那两种动物别称为“海洋变色龙”? 已知抛物线C的顶点在原点,焦点为F(0,1). (Ⅰ)求抛物线C的方程; (Ⅱ)在抛物线C上是否存在已知抛物线C的顶点在原点,焦点为F(0,1).(Ⅰ)求抛物线C的方程;(Ⅱ)在抛物线C上是 求能画电路原理图的软件在EWB protel CAD或其他中,找一个软件.由于有些电路原理图的原件在元件库里并找不到,自己画库元件也麻烦.(只要求快速画原理图,并不需要仿真正确)在word EWB protel CA 形容 舒缓的 四字或成语 要内涵的 求顶点在原点,焦点为F(5,0)的抛物线的标准方程 用什么软件画电路图好? 能表达后来居上意思的四字成语有哪些? 《小石潭记》翻译 唐伯虎画什么最出名?有说画美女,有说画山水请有知道答案的朋友帮我一下他没画过山水的画吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘