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

死神●复活日

死神●复活日

2016-02-19 18:55

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
解决VisualBasic的Grid控件的打印问题

VisualBasic控件的使用

编程语言 网络编程
VisualBasic控件的使用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VisualBasic控件简介

编程语言 网络编程
VisualBasic控件简介

VisualBasic控件的使用二

编程语言 网络编程
VisualBasic控件的使用二

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VisualBasic控件数据

编程语言 网络编程
VisualBasic控件数据

VisualBasic控件结构概述

编程语言 网络编程
VisualBasic控件结构概述

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

变量名称变成了保留字

变量名称变成了保留字

写bean类的准则(1)

写bean类的准则(1)
下拉加载更多内容 ↓