CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

非常着急!那位大哥知道用DataReport做打印时怎样设定横着打?如果出现了纸的宽度比较大时怎样处理?

楼主imissyoulipj(天涯浪子)2002-05-22 12:59:36 在 VB / 基础类 提问

非常着急!那位大哥知道用DataReport做打印时怎样设定横着打?如果出现了纸的宽度比较大时怎样处理?  
  因为我需要打印的东西比较大,纸张需要比较大,但用A4的纸横着打也可以,但不知道怎样设。那位大哥帮下忙好不?谢谢!  
  如果有例子的话麻烦发到:loveyouyou@sohu.com  
  谢谢! 问题点数:100、回复次数:3Top

1 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-05-22 13:05:28 得分 90

一个模块,设置打印方向  
   
   
  'Constants   used   in   the   DevMode   structure  
  Private   Const   CCHDEVICENAME   =   32  
  Private   Const   CCHFORMNAME   =   32  
   
  'Constants   for   NT   security  
  Private   Const   STANDARD_RIGHTS_REQUIRED   =   &HF0000  
  Private   Const   PRINTER_ACCESS_ADMINISTER   =   &H4  
  Private   Const   PRINTER_ACCESS_USE   =   &H8  
  Private   Const   PRINTER_ALL_ACCESS   =   (STANDARD_RIGHTS_REQUIRED   Or   PRINTER_ACCESS_ADMINISTER   Or   PRINTER_ACCESS_USE)  
   
  'Constants   used   to   make   changes   to   the   values   contained   in   the   DevMode  
  Private   Const   DM_MODIFY   =   8  
  Private   Const   DM_IN_BUFFER   =   DM_MODIFY  
  Private   Const   DM_COPY   =   2  
  Private   Const   DM_OUT_BUFFER   =   DM_COPY  
  Private   Const   DM_DUPLEX   =   &H1000&  
  Private   Const   DMDUP_SIMPLEX   =   1  
  Private   Const   DMDUP_VERTICAL   =   2  
  Private   Const   DMDUP_HORIZONTAL   =   3  
  Private   Const   DM_ORIENTATION   =   &H1&  
  Private   PageDirection   As   Integer  
  '------USER   DEFINED   TYPES  
   
  'The   DevMode   structure   contains   printing   parameters.  
  'Note   that   this   only   represents   the   PUBLIC   portion   of   the   DevMode.  
  '     The   full   DevMode   also   contains   a   variable   length   PRIVATE   section  
  '     which   varies   in   length   and   content   between   printer   drivers.  
  'NEVER   use   this   User   Defined   Type   directly   with   any   API   call.  
  '     Always   combine   it   into   a   FULL   DevMode   structure   and   then   send   the  
  '     full   DevMode   to   the   API   call.  
  Private   Type   DEVMODE  
          dmDeviceName   As   String   *   CCHDEVICENAME  
          dmSpecVersion   As   Integer  
          dmDriverVersion   As   Integer  
          dmSize   As   Integer  
          dmDriverExtra   As   Integer  
          dmFields   As   Long  
          dmOrientation   As   Integer  
          dmPaperSize   As   Integer  
          dmPaperLength   As   Integer  
          dmPaperWidth   As   Integer  
          dmScale   As   Integer  
          dmCopies   As   Integer  
          dmDefaultSource   As   Integer  
          dmPrintQuality   As   Integer  
          dmColor   As   Integer  
          dmDuplex   As   Integer  
          dmYResolution   As   Integer  
          dmTTOption   As   Integer  
          dmCollate   As   Integer  
          dmFormName   As   String   *   CCHFORMNAME  
          dmLogPixels   As   Integer  
          dmBitsPerPel   As   Long  
          dmPelsWidth   As   Long  
          dmPelsHeight   As   Long  
          dmDisplayFlags   As   Long  
          dmDisplayFrequency   As   Long  
          dmICMMethod   As   Long                 '   //   Windows   95   only  
          dmICMIntent   As   Long                 '   //   Windows   95   only  
          dmMediaType   As   Long                 '   //   Windows   95   only  
          dmDitherType   As   Long               '   //   Windows   95   only  
          dmReserved1   As   Long                 '   //   Windows   95   only  
          dmReserved2   As   Long                 '   //   Windows   95   only  
  End   Type  
   
  Private   Type   PRINTER_DEFAULTS  
  'Note:  
  '     The   definition   of   Printer_Defaults   in   the   VB5   API   viewer   is   incorrect.  
  '     Below,   pDevMode   has   been   corrected   to   LONG.  
          pDatatype   As   String  
          pDevMode   As   Long  
          DesiredAccess   As   Long  
  End   Type  
   
   
  '------DECLARATIONS  
   
  Private   Declare   Function   OpenPrinter   Lib   "winspool.drv"   Alias   "OpenPrinterA"   (ByVal   pPrinterName   As   String,   phPrinter   As   Long,   pDefault   As   PRINTER_DEFAULTS)   As   Long  
  Private   Declare   Function   SetPrinter   Lib   "winspool.drv"   Alias   "SetPrinterA"   (ByVal   hPrinter   As   Long,   ByVal   Level   As   Long,   pPrinter   As   Any,   ByVal   Command   As   Long)   As   Long  
  Private   Declare   Function   GetPrinter   Lib   "winspool.drv"   Alias   "GetPrinterA"   (ByVal   hPrinter   As   Long,   ByVal   Level   As   Long,   pPrinter   As   Any,   ByVal   cbBuf   As   Long,   pcbNeeded   As   Long)   As   Long  
  Private   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (hpvDest   As   Any,   hpvSource   As   Any,   ByVal   cbCopy   As   Long)  
  Private   Declare   Function   ClosePrinter   Lib   "winspool.drv"   (ByVal   hPrinter   As   Long)   As   Long  
   
  'The   following   is   an   unusual   declaration   of   DocumentProperties:  
  '     pDevModeOutput   and   pDevModeInput   are   usually   declared   ByRef.     They   are   declared  
  '     ByVal   in   this   program   because   we're   using   a   Printer_Info_2   structure.  
  '     The   pi2   structure   contains   a   variable   of   type   LONG   which   contains   the   address  
  '     of   the   DevMode   structure   (this   is   called   a   pointer).     This   LONG   variable   must  
  '     be   passed   ByVal.  
  '     Normally   this   function   is   called   with   a   BYTE   ARRAY   which   contains   the   DevMode  
  '     structure   and   the   Byte   Array   is   passed   ByRef.  
  Private   Declare   Function   DocumentProperties   Lib   "winspool.drv"   Alias   "DocumentPropertiesA"   (ByVal   hWnd   As   Long,   ByVal   hPrinter   As   Long,   ByVal   pDeviceName   As   String,   ByVal   pDevModeOutput   As   Any,   ByVal   pDevModeInput   As   Any,   ByVal   fMode   As   Long)   As   Long  
   
  Private   Sub   SetOrientation(NewSetting   As   Long,   chng   As   Integer,   ByVal   frm   As   Form)  
          Dim   PrinterHandle   As   Long  
          Dim   PrinterName   As   String  
          Dim   pd   As   PRINTER_DEFAULTS  
          Dim   MyDevMode   As   DEVMODE  
          Dim   Result   As   Long  
          Dim   Needed   As   Long  
          Dim   pFullDevMode   As   Long  
          Dim   pi2_buffer()   As   Long           'This   is   a   block   of   memory   for   the   Printer_Info_2   structure  
                  'If   you   need   to   use   the   Printer_Info_2   User   Defined   Type,   the  
                  '     definition   of   Printer_Info_2   in   the   API   viewer   is   incorrect.  
                  '     pDevMode   and   pSecurityDescriptor   should   be   defined   As   Long.  
           
          PrinterName   =   Printer.DeviceName  
          If   PrinterName   =   ""   Then  
                  Exit   Sub  
          End   If  
           
          pd.pDatatype   =   vbNullString  
          pd.pDevMode   =   0&  
          'Printer_Access_All   is   required   for   NT   security  
          pd.DesiredAccess   =   PRINTER_ALL_ACCESS  
           
          Result   =   OpenPrinter(PrinterName,   PrinterHandle,   pd)  
           
          'The   first   call   to   GetPrinter   gets   the   size,   in   bytes,   of   the   buffer   needed.  
          'This   value   is   divided   by   4   since   each   element   of   pi2_buffer   is   a   long.  
          Result   =   GetPrinter(PrinterHandle,   2,   ByVal   0&,   0,   Needed)  
          ReDim   pi2_buffer((Needed   \   4))  
          Result   =   GetPrinter(PrinterHandle,   2,   pi2_buffer(0),   Needed,   Needed)  
           
          'The   seventh   element   of   pi2_buffer   is   a   Pointer   to   a   block   of   memory  
          '     which   contains   the   full   DevMode   (including   the   PRIVATE   portion).  
          pFullDevMode   =   pi2_buffer(7)  
           
          'Copy   the   Public   portion   of   FullDevMode   into   our   DevMode   structure  
          Call   CopyMemory(MyDevMode,   ByVal   pFullDevMode,   Len(MyDevMode))  
           
          'Make   desired   changes  
          MyDevMode.dmDuplex   =   NewSetting  
          MyDevMode.dmFields   =   DM_DUPLEX   Or   DM_ORIENTATION  
          MyDevMode.dmOrientation   =   chng  
           
          'Copy   our   DevMode   structure   back   into   FullDevMode  
          Call   CopyMemory(ByVal   pFullDevMode,   MyDevMode,   Len(MyDevMode))  
           
          'Copy   our   changes   to   "the   PUBLIC   portion   of   the   DevMode"   into   "the   PRIVATE   portion   of   the   DevMode"  
          Result   =   DocumentProperties(frm.hWnd,   PrinterHandle,   PrinterName,   ByVal   pFullDevMode,   ByVal   pFullDevMode,   DM_IN_BUFFER   Or   DM_OUT_BUFFER)  
           
          'Update   the   printer's   default   properties   (to   verify,   go   to   the   Printer   folder  
          '     and   check   the   properties   for   the   printer)  
          Result   =   SetPrinter(PrinterHandle,   2,   pi2_buffer(0),   0&)  
           
          Call   ClosePrinter(PrinterHandle)  
           
          'Note:   Once   "Set   Printer   =   "   is   executed,   anywhere   in   the   code,   after   that   point  
          '             changes   made   with   SetPrinter   will   ONLY   affect   the   system-wide   printer     --  
          '             --   the   changes   will   NOT   affect   the   VB   printer   object.  
          '             Therefore,   it   may   be   necessary   to   reset   the   printer   object's   parameters   to  
          '             those   chosen   in   the   devmode.  
          Dim   p   As   Printer  
          For   Each   p   In   Printers  
                  If   p.DeviceName   =   PrinterName   Then  
                          Set   Printer   =   p  
                          Exit   For  
                  End   If  
          Next   p  
          Printer.Duplex   =   MyDevMode.dmDuplex  
  End   Sub  
   
  Public   Sub   ChngPrinterOrientationLandscape(ByVal   frm   As   Form)  
          PageDirection   =   2  
          Call   SetOrientation(DMDUP_SIMPLEX,   PageDirection,   frm)  
  End   Sub  
   
  Public   Sub   ResetPrinterOrientation(ByVal   frm   As   Form)  
     
          If   PageDirection   =   1   Then  
                  PageDirection   =   2  
          Else  
                  PageDirection   =   1  
          End   If  
          Call   SetOrientation(DMDUP_SIMPLEX,   PageDirection,   frm)  
  End   Sub  
   
  Public   Sub   ChngPrinterOrientationPortrait(ByVal   frm   As   Form)  
   
          PageDirection   =   1  
          Call   SetOrientation(DMDUP_SIMPLEX,   PageDirection,   frm)  
  End   Sub  
  Top

2 楼luoqing(明天将会...)回复于 2002-05-22 13:06:45 得分 10

如果你的VB6打了SP5的话,可以用下面语句  
  DataReport.Orientation=rptOrientLandscape就可以设定为横向打印Top

3 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2002-05-22 13:07:23 得分 0

调用方法  
   
  ChngPrinterOrientationPortrait(me)  
  ChngPrinterOrientationLandscape(me)Top

相关问题

  • 如何改变datareport的宽度
  • 怎样在DataReport运行之前判断报表宽度大于纸的宽度。
  • DataReport的报表宽度究竟是多少?
  • 使用datareport做报表时出现“报表宽度大于纸的宽度”,如何避免,肯定给分!
  • 使用datareport,“报表宽度大于纸的宽度”错误是怎么回事啊
  • Datareport报表的宽度大与纸张的宽度的问题,本人急,在线等
  • DataReport中的shape控件能否修改它的边框线的宽度?
  • 诸位大哥﹐我想只改变TrackBar上的光标宽度﹐而不影响TrackBar的高度﹐请问如何做!提示一下…Thks!!!!
  • 请哪位大哥帮我改一下原代码,不知道怎么回事,我想让他的列的宽度固定
  • 大哥~

关键词

  • 打印
  • access
  • dm
  • dmdup
  • 大哥
  • 纸
  • printer
  • 时怎样
  • 横着打
  • private const

得分解答快速导航

  • 帖主:imissyoulipj
  • lihonggen0
  • luoqing

相关链接

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

广告也精彩

反馈

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