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

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

VB如何从文件中提取图标 VB如何关闭/重新启动计算机? VB如何建立快捷方式? VB如何让窗口始终在最前面? VB如何使你的程序同文件扩展名建立关联? VB如何提高调用WINDOWS API函数编程技巧 VB如何为你的应用程序设置热键? VB如何隐藏鼠标指针 VB如何用api检查任务栏中有多少种输入法 VB如何在函数中传递数量不定的参数? VB使用 kb_event 函数模拟键盘操作 VB使用API获取颜色 VB使用标签控件调出浏览器 VB使用调用外部程序函数实现API函数高级功能 未公开API函数揭秘——通用对话框-VB资料 显示文件属性对话框-VB资料 VB用 API 打开打印对话框 VB用API函数改进ListView控件的显示效果 VB用API函数控制光驱的开关 VB用注册表保存数据(VB函数篇) 有关Tray系统盒的VB API函数 在VB中调用API函数动态改变及恢复屏幕设置 在VB中控制Ctrl+Del+Alt键 在VB中使用API函数 (之二) 在VB中使用API函数 (之三) 在VB中使用API函数 (之四) 在VB中使用API函数 (之五) 在VB中使用API函数 (之一) 在VB中用API实现多媒体 VB怎样用VB在应用程序中调用API VB怎样在DELPHI中使用API函数 请问如何创建一个大于屏幕分辨率的窗口? 公开putao的最大秘密,他女友的隐私! 关于不同版本的用户对象的问题!(online) 在批处理中设置路径,有空格系统不认怎么办? 为了忘却的纪念(今天是咱们的国耻日) 关于JSP菜单实现的问题? 如何判断数组是否被赋值? 用MSCHART的二维折线图如何实现左右坐标分别标识不同的曲线? 请问招行的网上银行的在网上点击安装是怎么实现的呀? 100分只是开始。。。 如果回答继续加!! 一个template问题,想不出办法,高手请进 送分题:如何改变dll的调试可执行文件? 大家看看代码 真搞不懂为什么出错??? 如何在表单中设置包含字段http://schemas.microsoft.com/cdo/workflow/response 如何使用VBSCRIPT读取本页文本框中的数据, (不能用表单提交和JAVASCRIPT 能不能?) 我在桌面上执行一个应用程序,运行正常,但用pb中调用run("***.exe")运行是出错,提示是少了某些dll文件 我怎么才能使客户端发过来的经UF8编码的中文URL,还原成GD312,能找到页面? 我用openwithparm(w_1,arg),arg明明传递的是LONG型的数据,为什么用message.longparm接收到的是0,而一定要用message.doubleparm才能正确 问一个sql语句如何写,简单! 征集能够同时输出文本和图形的控件! 急寻bmp转gif的代码 封装在Dll中的窗口焦点问题 为什么我用JBUILDER编译JSP文件,用web run执行后会出现这些情况?? 有谁用过CMPPE2.0协议开发过网关程序的请进 win2000下内存使用的问题? 我每次都结贴子的,不信你们查一下啊,这次再请帮忙,谢谢哦 在公共文件夹如公告窗体的原件与回复件是如何关联的? delphi中form中放了一副图,怎样让图可见而form不可见? 一个关于vba的应用问题?合并文档 英文版的vb中该如何来把一个项目进行打包呢(想把它安装到一台没有装vb 的电脑上) 删除多余的重复记录 如何获取屏幕尺寸? 有人用过EasyPack的仿真器吗? 关于QuickRpt报表存盘后出现乱码的问题。 邮件监测器要怎么写?? 关于Web Browser控件 如何加快蓝点linux的安装速度 access 表中的datetime型字段在delphi中如何使用? 《windows 网络编程技术》是哪个出版社的 小弟正学socket编程,有个问题请教! 微软专家请看: Sybase数据库中的中文存储问题! 连接池在TOMCAT中不可用吗?我是新人。 简单的问题? SOS!!!!!!!!高分赠送!!请教大虾们一个有关MSSQL一个问题!! 我在VB.NET下调用弹出对话框,可是无论click确定还是取消,结果都一样,我写的有什么错误吗? 紧急寻找?????????高分求助 关于dbgril的问题。简单的问题加分哦 为什么不能编译这个头文件? 寻bmp转gif代码 vb.net做的control能在基于c#的web form中使用吗? 作文(那一次我流泪了)在400字左右,急.明天就要交了. 有一条与水平方向呈30度角的光线,为了使它沿水平方向射出,平面镜与水平面应成多少度角放置 在比例尺是1:20 000的平面图上,长方形的长是8厘米,宽是5厘米,那么这个正方形的面积是多少?xiexiexiexie 怎么写关于写自己优点和缺点的作文400字!明天要交了! 一束光射到平面镜上,入射角是30度,倘使平面镜转动10度则反射角是( )度,反射光线转过( )度 达芬奇的密码中有一幅画是:坐在一个椅子上的女人.这个画叫什么. 在比例尺是1:4000的地图上,量得一块长方形地的长是4厘米,宽是2.5厘米.这块长方形 充满阳光的生活 作文600左右就行~今天就要~ 《坐在椅子上的女人》谁画的?什么艺术风格?(现实主义,浪漫主义什么的)谢谢! 在比例尺是1:4000的地图上,量得一块长方形地的长是4厘米,宽是2.5厘米.这块长方形地的实际周长是()米,实际面积是()公顷. 这里的生活充满阳光500字的作文 为什么女人要少坐椅子 在比例尺为1:4000的地图上,量得一个长方形长是4厘米,宽是2.5厘米.这长方形的实际周长是多少米?它的实际面积是多少公顷? 高中800字作文.有好的会加分的当生活以一种快节奏 快餐式的方式渗透到我们身心中时 当我们尽享这种方便与快捷,不断追赶时尚潮流时,似乎很少想到我们所缺失的东西.我们到底缺失了什么 一个圆形花坛的半径是6m,它的外面有一条宽2m的环形小路,求小路的面积 新文化运动反对封建思想,为什么要把矛头指向以孔子为首的儒家传统道德? 如图,平面镜A与B(看成一条直线),光线由水平方向射来,传播线路为a—b—c,当a⊥b,b⊥c,∠1=∠3=45°,你知道平面镜A与B之间的位置关系吗?纯属数学题,图片暂时没有呃,你懂得. 作文 那一次,让生活充满阳光600左右,谢谢了回复一楼:偶作文很烂 幼儿园有红皮球60只,比花皮球的3倍多6只,花皮球比白皮球少6只.白皮球有多少只? 如图,平面镜A与B互相平行,光线由水平方向射来,传播线路为a→b→c,当a⊥,b⊥c,∠1=30°时,求平面镜B求平面镜B度数 春游作文300字 白皮球每个a元,花皮球每个8元,买b个花皮球和5个白皮球共要()元 作文材料 记住这一天 春游作文300字谁可以告诉我啊!复制的别来! 写阅兵式的作文300字,急!急!最底也有110分! 一个圆形花坛的直径是8m,在花坛周围摆放盆花,每隔1,57m放一盆,一共可以放几盆花? 春游作文300字别复制啊!复制的不要来! 一束光线与地面 40度角,现用一平面镜改变其光路,使反射光沿竖直方向射出去,求放置的镜面与地面的夹角 一个圆形花坛的直径是8m,在花坛的周围放盆花,每隔1.57m放一盆,一共可以放几盆花 关于传统佳节.民俗民风的作文 600字 靠墙边围成一个平行四边形花坛,围花坛的篱笆长99米,求这个花坛的面积.如图: 描写春天景色的200~300字作文 关于传统佳节的作文多来几篇! 观阅兵式有感作文200—300字注:字数不可以超过300字如果符合要求我再加分 一个圆形花坛直径是8m,在花坛周围摆放盆花,每隔1.57m放一盆,一共可以放几盆花 我的生活充满阳光作文叙事作文600字 十万火急!阅兵式作文300到500字左右 一束光线垂直射到平面镜上 然后将平面镜转动A 入射光线保持不变 那么反射光线的方向将改变?02AAA/2 一个圆形花坛,半径3厘米,如果半径增加1米,那么花坛的面积增加多少平方米? 阅兵式作文(赞叹的写法)300字要用赞叹的情感写 速度 200~300字 一个圆形花园直径是10米,在花坛周围每隔1.57米摆一盆花,共可摆几盆花? 要建造一个面积为314平方米的圆形花坛,他的半径是多少?(π取3.14) 故宫建筑反映了中国古代建筑哪些优点? 清明节扫墓作文400字!一定要自己写的喔!急 急 急 急 急 急 一个圆形花坛半径是10米,扩建后,半径增加6米.花坛的面积增加了多少平方米? 一个圆形花坛的周长是125.6米这个花坛的直径是多少?此页面是否是列表页或首页?未找到合适正文内容. 清明节作文400~500字(急急急急急急急急急急急) 小丹在比例尺是1:100的房屋设计图上,量的自家房屋平面长16CM,宽8CM.小丹的爸爸准备把房屋的地面铺上变长为0.8M的正方形地砖,大约需要多少快这样的地砖? 一块长方形菜地的平面图的比例尺是1:500,这这块菜地图上面积与实际面积的比是多少 清明节作文350到400字 我的生活充满阳光 要新的! 一个圆形花坛的周长是125.6m,这个花坛直径是多少? 《那一天》高中作文800字以上 急求【春节节日感受作文】不要抄的! 篮球的单价比足球贵3元李老师带去300元无论买哪一种球钱正好用完如果买足球可比买篮球多买5个那么买足球可买多少个 体验爸爸妈妈的一天作文500字 求一篇《春节节日感悟》的作文450字左右,不要全部抄袭改一点就好 春游的作文100字要写周记!麻烦. 在比例尺是1:400的图书大厦平面图上,量得图书大厦长20厘米、宽8.5厘米,这座大厦的实际占地面积是 在比例尺是1:100的平面图上,量的一块长方形的长是15厘米,宽是8厘米.这块地的实际面积是多少?能用方程么?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘