CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何打印一个FRAME里面的内容,以及如何打印一个MSFlexGrid里面的内容?

楼主okflight(flight)2004-12-02 00:28:30 在 VB / 基础类 提问

如何打印一个FRAME里面的内容,以及如何打印一个MSFlexGrid里面的内容? 问题点数:100、回复次数:7Top

1 楼aohan(aohan)回复于 2004-12-02 08:18:22 得分 0

有打印MSFlexGrid的例子,到时发一个Top

2 楼daisy8675(莫依 沉迷)回复于 2004-12-02 08:27:17 得分 80

用printer对象打印表格  
   
        用msflexgrid控件显示的表格,要将它打印出来,最简单的方法是用printform方法,然而这只适合于数据正好能被屏幕显示的,即数据量少的,而且这种打印效果很差。而用printer对象进行打印编程,虽然麻烦点,但效果却是相当不错的,你可以自定义打印格式,打印页数,表格的粗细,字体大小等。实际上用printer对象进行打印编程是比较简单的。  
   
  下面我就用一实例来说明:  
   
  打印的内容是一张数据表,这里就只有两列数据,包括标题,副标题。(用A4纸打印)  
   
  假设数据处在C_DataArray(),和R_DataArray()中C_Name与R_Name分别为两数据项的字段名  
   
  Public   Sub   Printtable()  
  '初始化  
   
  Dim   printer1   as   Printer  
   
  Dim   pageheader  
  Dim   pagefooter  
  Dim   pageleft  
  Dim   pageright  
  Dim   usewidth  
  Dim   useheight  
  Dim   i,   j,   k   As   Integer  
  Dim   word   As   String  
  Dim   startx  
  Dim   starty  
  Dim   startyline                           ‘   用来纪录打印竖线的起点  
   
  Dim   endyline                             ’   用来纪录打印竖线的末点  
   
  设置页面参数  
   
  pageheader   =   25  
  pagefooter   =   25  
  pageleft   =   20  
  pageright   =   20  
   
   
    With   printer1  
          .PaperSize   =   9  
          .ScaleMode   =   6  
          .FontBold   =   True  
          .ScaleLeft   =   -20  
          .ScaleTop   =   -25  
          .ScaleWidth   =   210                                                                                 '设置为A4纸  
          .ScaleHeight   =   297  
          usewidth   =   .ScaleWidth   -   40  
          useheight   =   .ScaleHeight   -   50  
          .CurrentX   =   0  
          .CurrentY   =   0  
          .DrawWidth   =   5  
  End   With  
  '打印标题  
  With   printer1  
          .FontSize   =   20  
          .CurrentX   =   (usewidth   -   .TextWidth(DataTitle))   /   2  
          .CurrentY   =   pageheader   +   .ScaleTop  
  End   With  
          printer1.Print   DataTitle  
         
    '打印副标题  
        printer1.FontSize   =   15  
          word   =   DataTitle2  
          printer1.CurrentX   =   usewidth   -   printer1.TextWidth(word)  
          printer1.Print   word  
           
    '打印第一条线     Line方法不能用在with   ....end   with里  
   
  printer1.CurrentX   =   pageleft   +   printer1.ScaleLeft  
  startyline   =   printer1.CurrentY  
  '线宽  
   
  printer1.Line   -((printer1.ScaleLeft   +   printer1.ScaleWidth   -   pageleft),   printer1.CurrentY)  
  printer1.FontSize   =   10  
  'printer1.Print   vbLf  
  printer1.CurrentY   =   printer1.CurrentY   +   1  
  '打印第一个字段名  
  starty   =   printer1.CurrentY  
  printer1.CurrentX   =   ((printer1.ScaleWidth   -   40)   /   2   -   printer1.TextWidth(C_Name))   /   2  
   
  printer1.Print   C_Name  
   
   
  '打印第二个字段名  
  printer1.CurrentX   =   usewidth   /   2   +   ((usewidth   /   2   -   printer1.TextWidth(R_Name))   /   2)  
  printer1.CurrentY   =   starty  
  printer1.Print   R_Name  
  printer1.CurrentY   =   printer1.CurrentY   +   1  
   
   
  '打印数据和横线,rownum为数据行数  
   
  For   i   =   1   To   rownum  
  '判断是否该页已打满  
          If   printer1.CurrentY   >=   useheight   Then  
   
          '打印横线  
          printer1.CurrentX   =   printer1.ScaleLeft   +   pageleft  
          printer1.Line   -((printer1.ScaleLeft   +   printer1.ScaleWidth   -   pageleft),   printer1.CurrentY)  
          printer1.CurrentY   =   printer1.CurrentY   +   1  
           
             
                  '打印三条竖线  
                  endyline   =   printer1.CurrentY  
                  printer1.Line   (0,   startyline)-(0,   endyline)  
                  printer1.Line   (usewidth   /   2,   startyline)-(usewidth   /   2,   endyline)  
                  printer1.Line   (usewidth,   startyline)-(usewidth,   endyline)  
                   
                '打印页号  
                With   printer1  
                  .CurrentX   =   (.ScaleWidth   -   .TextWidth(.Page))   /   2   -   pageleft  
                  .CurrentY   =   useheight   +   3  
                End   With  
                  printer1.Print   printer1.Page  
                  printer1.NewPage  
                With   printer1  
                          .CurrentX   =   pageleft   +   .ScaleLeft  
                          .CurrentY   =   pageheader   +   .ScaleTop  
                          startyline   =   .CurrentY  
                End   With  
                   
          End   If  
           
          '打印一行数据  
          printer1.CurrentX   =   ((printer1.ScaleWidth   -   40)   /   2   -   printer1.TextWidth(C_DataArray(i)))   /   2  
          starty   =   printer1.CurrentY  
          printer1.Print   C_DataArray(i)  
          printer1.CurrentX   =   (printer1.ScaleWidth   -   40)   /   2   +   ((printer1.ScaleWidth   -   40)   /   2   -   printer1.TextWidth(R_DataArray(i)   ))   /   2  
          printer1.CurrentY   =   starty  
          printer1.Print   R_DataArray(i)  
          printer1.CurrentY   =   printer1.CurrentY   +   1          
  Next   i  
                '打印最后一条横线  
          printer1.CurrentX   =   printer1.ScaleLeft   +   pageleft  
          printer1.Line   -((printer1.ScaleLeft   +   printer1.ScaleWidth   -   pageleft),   printer1.CurrentY)  
          endyline   =   printer1.CurrentY  
  '打印三条竖线  
                  printer1.Line   (0,   startyline)-(0,   endyline)  
                  printer1.Line   (usewidth   /   2,   startyline)-(usewidth   /   2,   endyline)  
                  printer1.Line   (usewidth,   startyline)-(usewidth,   endyline)  
         
     
                  '打印页号  
                With   printer1  
                  .CurrentX   =   (.ScaleWidth   -   .TextWidth(.Page))   /   2   -   pageleft  
                  .CurrentY   =   useheight   +   3  
                End   With  
                  printer1.Print   printer1.Page  
                 
  printer1.EndDoc  
  end   sub  
   
  如要打印mshflex等  
  你可以自己对printer对象写代码  
  循环行、列赋值  
   
   
   
  Top

3 楼wumylove1234(毁于随)回复于 2004-12-02 08:49:35 得分 10

让窗体大小正好是Frame的大小,  
  然后  
  Me.PrintForm  
  打印整个窗体.  
   
  打表格的就用莫依的方法吧.用Printer去打.Top

4 楼saiko(小新)回复于 2004-12-02 11:56:27 得分 10

如果打印的表格不是很多,就直接用   Me.PrintForm   打印   或生成一个图片文件打印。  
   
  另外,也可以在   莫依   的方法的基础上画上类似于是   Frame   大小长度的线,也可以解决的  
  Top

5 楼lxjlz()回复于 2004-12-02 12:19:32 得分 0

同意Top

6 楼True1024()回复于 2004-12-02 12:20:47 得分 0

晚了。UPTop

7 楼Plutoxkxu(★深渊★)回复于 2004-12-02 12:36:43 得分 0

同意Top

相关问题

  • 怎样打印MsFlexGrid中的内容?
  • frame中内容的打印问题
  • 求救,有没有打印MSFLEXGRID内容的代码?
  • 如保打印窗体上的MSFlexGrid控件中的内容!
  • 如何打印出MsFlexGrid控件中的内容?
  • 救命!怎样在VC里打印一个MsFlexGrid里的内容
  • 在form里有一个msflexgrid的网格,用什么方法打印它显示的内容?(用打印机啊)
  • 60分有人愿意得吗?求打印MSFLEXGRID内容的代码!不要屏幕打印的!
  • 怎样打印Frame中的内容,很急!
  • 怎么吧msflexgrid表的内容弄到excel中,主要是为了打印!~~不是很难吧

关键词

  • 打印
  • 内容
  • 表格
  • 数据
  • msflexgrid
  • printer1
  • datatitle
  • 里面的内容
  • frame
  • 用printer对象

得分解答快速导航

  • 帖主:okflight
  • daisy8675
  • wumylove1234
  • saiko

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo