网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> VB编程 >> 文章正文
  VB中给DataReport指定打印机            【字体:
VB中给DataReport指定打印机
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-26    

  DataReport是VB的报表工具,其简单方便快捷,解决常用的报表问题还是不错的。
正在装载数据……
不过在打印功能上有一个非常大的弱点,就是在代码中不能通过相关属性或方法来指定打印机,只能用系统默认打印机来打印报表。这个问题也是论坛上常议的话题,在网上搜索一下,你可以找到解决方法(我没测试过),不过代码量不小,而且大量的API和Printer对象,令初学者望而却步。一直在找一个较为简单的解决方案,于是想到了注册表,通过查阅Microsoft相关文章(http://support.microsoft.com/kb/271257/zh-cn),通过实践,终于解决,示例代码如下:

'通过注册表修改默认打印机,来指定Rpt的打印


'模块中的代码:

Option Explicit

 
'打开一个主键
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
( _
    
ByVal hKey As Long, _
    
ByVal lpSubKey As String, _
    
ByRef phkResult As Long _
As Long
    
'关闭一个主键
Public Declare Function RegCloseKey Lib "advapi32.dll" _
( _
    
ByVal hKey As Long _
As Long
    
'创建或改变一个键值,lpData应由缺省的ByRef型改为ByVal型
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
( _
    
ByVal hKey As Long, _
    
ByVal lpValueName As String, _
    
ByVal Reserved As Long, _
    
ByVal dwType As Long, _
    
ByVal lpData As Any, _
    
ByVal cbData As Long _
As Long
    
'查询一个键值,lpData应由缺省的ByRef型改为ByVal型
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
( _
    
ByVal hKey As Long, _
    
ByVal lpValueName As String, _
    
ByVal lpReserved As Long, _
    
ByRef lpType As Long, _
    
ByVal lpData As Any, _
    
ByRef lpcbData As Long _
As Long

'根键常数
Const HKEY_CLASSES_ROOT = -2147483648#
Const HKEY_CURRENT_USER = -2147483647#
Const HKEY_LOCAL_MACHINE = -2147483646#
Const HKEY_USERS = -2147483645#
    
'键值类型
Const REG_SZ = 1&             '字符串值
Const REG_BINARY = 3&         '二进制值
Const REG_DWORD = 4&          'DWORD值


'通过修改注册表修改默认打印机
'
win2000,winXP: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows

Public Sub SetDefaultPrinter(ByVal sPrinter As String)
    
    
Dim nKeyHandle As Long, nValueType  As Long, nLength As Long
    
Dim sValue As String
    
    
Dim p As Printer
    
For Each p In Printers
        
If p.DeviceName = sPrinter Then
            sValue 
= p.DeviceName & "," & p.DriverName & "," & p.Port
            
Exit For
        
End If
    
Next
    
Set p = Nothing    

    nValueType 
= REG_SZ
    nLength 
= 255

    
Call RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Windows", nKeyHandle)
    
'修改Device这个值
    Call RegSetValueEx(nKeyHandle, "Device"0, nValueType, sValue, nLength)
    
'查询Device这个值
    'sValue = Space(255)
    'Call RegQueryValueEx(nKeyHandle, "Device", 0, nValueType, sValue, nLength)
    'MsgBox sValue
    Call RegCloseKey(nKeyHandle)
       
End Sub


'DataReport中的代码:
'
指定DataReport打印机
Private Sub DataReport_Initialize()
    
Call SetDefaultPrinter("\\PC1EPSON LQ-680K ESC/P 2")
End Sub


'完成报表打印后还原原有默认打印机,原有默认打印机可以由RegQueryValueEx获得
Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)
    
Call SetDefaultPrinter("\\Pc8Legend LJ6112MFC")
    
End
End Sub

以上代码 VB6 SP6 + Windows XP SP2 下通过 




本文来源:http://blog.csdn.net/vbman2003/archive/2007/08/25/1758420.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     如何在ado中使用connect…
     vb 贪吃蛇 单人版游戏 (…
     关于在vb中进行com组件的…
     用vb6.0编写自我升级的程…
     vb自动登陆网络站点详解…
     vb打造超酷个性化菜单(…
  • page、request、session、ap…

  • iBatis一级缓存的探讨

  • SPRING+STRUTS+HIBERNATE登录…

  • 一个关于Comparator的使用例…

  • JavaWeb中的Session、Sessio…

  • tomcat下配置jspservletbean…

  • 内存管理内幕--Jonathan Bar…

  • 初学者入门:一个COM/ATL简单…

  • 初学者入门:写一个简单的CO…

  • c++专题: static

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David