解决VisualBasic的Grid控件的打印问题

2016-02-19 18:55 10 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的解决VisualBasic的Grid控件的打印问题,希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

----Grid控件是VisualBasic最常见控件之一,从VB3.0到VB5.0都有该控件。也是VB爱好者最喜爱的工具之一。用它可以以表格的形式显示、浏览数据,特别是数据库应用,直接绑定即可显示浏览数据库信息。然而,美中不足的是Grid没有编辑和打印功能,列与列的位置不能相互交换。笔者曾尝试着给Grid增添了这些功能,使之锦上添花,功能更强大。下面给出改进方法及源程序,读者只需按步骤写下源程序即可使你的Grid具有打印功能。该程序笔者在HP5/100Window95环境下用VB5.0调试通过。
  
  ----给Grid控件增加打印方法有三种:1是直接打印控件的方法,2是过printer来实现打印功能,3是通过调用MS-WORD及MS-EXCEl来实现打印。

----首先,打开一个应用,在FORM1中增加DATA控件DATA1,把DATA1的CONNECT属性设为dBASEIII,再把DATABASENAME属性设为D:PJXM.DBF。然后再在FORM1中增加MSFLEXGRID空间GRID1,并把GRID1的DATASOURCE属性设为DATA1。这样数据库PJXM.DBF的信息就会在GRID1中显示出来。
  
  ----方法一:直接打印窗体法,在FORM1中增加命令按钮(command),CAPTION属性设为直接打印,再写入下列编码:
  
  Subcommand_click
  Form1.printform
  Endsub
  
  ----这样即可通过打印窗体FORM1的方法把GRID1的数据打印出来,遗憾的是只能打印GRID1中显示的数据部分,显示不出来的则无法打印,而且这种打印方法很象屏幕硬拷贝把其他控件也打印出来。也不能灵活的控制字体等。
  
  ----方法二:通过PRINTER实现打印。这种方法
  
  ----1、加入打印命令按钮(command1)、函数(prnt1)即可实现打印功能,写入下面代码,读者稍加改动可写成标准的函数或过程。
  
  Functionprnt1(xAsInteger,yAsInteger,
  fontAsSingle,txtAsString)
  printer.CurrentX=x
  printer.CurrentY=y
  printer.FontBold=False
  printer.FontSize=font
  printer.Printtxt
  EndFunction
  
  Subcommand1_click
  DimfntAsSingle
  Dimppasinteger
  Pp=0'设置开始页码0
  Dimstry,strx,strx1,stry1,linw,page1,pAsInteger
  Statica(8)AsInteger'定义打印的列数
  ss$="内部结算存入款对帐单"'定义表头
  kan=0
  Fori=0To8
  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)
  Forj=0Togridrow-1'gridrow为所要打印的行数
  grid1.row=j
  strx=strx1
  printer.Line(strx-50,stry-30)
  -(strx kan-10,stry-30)
  p=p 1
  Fori=0To8
  grid1.col=i
  dd=prnt1(strx,stry,fnt,grid1.text)
  strx=strx a(i)
  Next
  
  Ifppage1Then'nextpage
  p=0
  strx=strx1
  'linelastline
  printer.Line(strx-50,stry linw)
  -(strx kan-10,stry linw)
  stry=stry1
  'linecol
  Forn=0To8
  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'nextpage
  dd=prnt1(4000,700,18,ss$)'打印标题
  strx=strx1
  stry=stry1
  printer.Line(strx-50,stry-30)-
  (strx kan-10,stry-30)'printfirstrow
  Else
  stry=stry linw
  EndIf
  Next
  st=stry
  Ifppage1Then'在最后页剩余划空行
  Foro=pTopage1 1
  strx=strx1
  printer.Line(strx-50,stry-30)
  -(strx kan-10,stry-30)
  stry=stry linw
  Next
  EndIf
  stry=stry1
  strx=strx1
  stry=stry1'linecol
  Forn=0To8
  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
  
  ----这种方法通过灵活的编程可以方便地调整字体、字型、线形、页面、纸张大小等。可打印出比较满意的效果。如果你的计算机上装有MICROSOFTWORD和MICROEXCEL,最精彩的用法还是把GRID的表格通过VB发送到MICROSOFTWORD及MICROEXCEL。生成MICROSOFTWORD和MICROEXCEL表格。这样就可以充分利用MICROSOFTWORD和MICROEXCEL的打印、编辑功能打印出更理想的效果。下面逐一介绍。
  
  ----方法三:通过生成MICROSOFTWORD表格打印
  
  ----1、在declaration中写入:
  
  DimmswordAsObject
  
  ----2、加入打印命令按钮(command2),CAPTION设为"生成WORD表
  格",写入下面代码,
  
  PrivateSubcommand2_Click()
  
  screen.MousePointer=11
  Setmsword=CreateObject("word.basic")
  
  DimAppID,ReturnValue
  appID=Shell("d:office97officeWINWORD.EXE",1)
  'RunMicrosoftWord.
  
  msword.AppActivate"MicrosoftWord"
  'msword.AppActivate"MicrosoftWord",1
  full
  Screen.MousePointer=0
  EndSub
  
  ----2、写入以下过程full()
  
  Subfull()
  DimiAsInteger,jAsInteger,
  colAsInteger,rowAsInteger
  DimcellcontentAsString
  Me.Hide
  cols=4'表格的列数
  row=gridrow'打印表的行数
  msword.filenewdefault
  msword.MsgBox"正在建立MS_WORD报表,
  请稍候.......","",-1
  msword.leftpara
  msword.screenupdating0
  msword.tableinserttable,col,row,,,16,167
  msword.startofdocument
  forj=0togridrow'表格的行数
  grid1.row=j
  Fori=1Tocols
  Gri1d.col=i
  IfIsNull(grid1.text)Then
  cellcontent$=""
  Else
  cellcontent$=grid1.text
  EndIf
  msword.Insertcellcontent$
  msword.nextcell
  Nexti
  Nextj
  msword.tabledeleterow
  msword.startofdocument
  msword.tableselectrow
  msword.tableheadings1
  msword.centerpara
  'msword.startdocument
  msword.screenrefresh
  msword.screenupdating1
  msword.MsgBox"结束","",-1
  Me.Show
  
  EndSub
  
  ----方法四:通过发送到MICROSOFTEXCEL实现表格打印
  
  ----1、加入打印命令按钮(command3),CAPTION设为"生成EXCEL表
  格",写入下面代码
  
  PrivateSubcommand3_Click()
  DimiAsInteger
  DimjAsInteger
  DimxlAppAsExcel.Application
  DimxlBookAsExcel.Workbook
  DimxlSheetAsExcel.Worksheet
  
  SetxlApp=CreateObject("Excel.Application")
  xlApp.Visible=True
  'SetxlBook=xlApp.Workbooks.Add
  'OnErrorResumeNext
  SetxlBook=xlApp.Workbooks.Add'Open("d:ext2.xls")
  SetxlSheet=xlBook.Worksheets(1)
  xlSheet.Cells(6,1)="i"
  Fori=0Togridrow
  grid1.Row=i
  Forj=0To6
  Grid1.Col=j
  
  IfIsNull(Grid1.Text)=FalseThen
  xlSheet.Cells(i 5,j 1)=Grid1.Text
  EndIf
  Nextj
  Nexti
  ExitSub->

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1619486.html

延伸阅读
《超级房车赛之起点》罗技momo与grid的配合问题的解决 有许多玩家,都遇到过这样的问题!!!就是当用罗技MOMO玩GRID的时候,使用自动档或手动档,速度总是上不去,经常在一档65km/h左右,经过不断研究,问题解决,希望大家支持!!!   打开游戏控制器罗技MOMO属性打开设置最关键的一点到了!!! 一定要把踏板报告方式组合前面的钩去掉...
标签: windows 操作系统
整理一下 Windows Vista 下使用支付宝控件、证书的常见问题。   问题: 错误提示 "Cenroll 为空或不是对象,错误代码 800A138F" 场景: 安装支付宝数字证书时出现。 解决办法: 1) 确保 Windows Vista 服务 Protected Storage 是启动的。开始-控制面板(经典视图) - 服务--Protected Storage 2...
财务人员都知道,转账支票的出票日期是需要大写的。如果用手写,当然可以直接填写成大写,但如果设计专用软件进行套打,每张支票都在固定位置填写大写会很麻烦,也没有必要。这里仅以Access2007设计为例,给这方面的爱好者提供一个思路。 一、先设计一个Access2007表,加入转账支票可能需要的字段,比如付款人名称、付款人账号、收款...
标签: 电脑入门
点阵打印机是利用打印头内的点阵撞针来撞击色带进而在打印纸上产生文字或图形的, 所以我们习惯叫它为针式打印机,目前使用比较普遍的是 24 针打印机,无论是多少针的打印机, 其所使用的色带通常都是单色的,当然,有些点阵打印机是可以打印彩色图形的,但其打印 速度要比喷墨打印机慢,而且精度较低、噪声也较大,综上原因导致了点阵打印机在...
关于控件注册和使用许可问题的解决办法 作者:catclaw2000 鉴于前一段时间受困于微软控件的授权问题,而且互联网上也很难找到问题的解决方案,这两天论坛中也不停有网友在问相类似的问题,特撰写此文,以飨VCKBASE各位网友。 大家都知道,对于普通的OCX控件,我们在发布时,使用安装软件拷贝到目标机器上然后再注册一下(或者手工拷贝...

经验教程

444

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部