Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 报表  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702312
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

在子窗体中预览报表

作者:朱亦文  摘自:Access中国  :cg1  更新日期:2004-1-4  浏览人次:

 

在子窗体中预览报表  

原文地址:http://www.access-cn.com/Article_Show.asp?ArticleID=278

 

  本文适用于: Access 2002 以上版本 (Access 2000 不支持弹出式报表)


  在很多的时候,需要在窗体的指定位置预览报表,可是 Access 并没有提供这样功能,Access 报表也不能作为子窗体的形式放在窗体中。那么,如何解决这一问题呢?借助 Windows API 我们可以实现这一功能。

  在这过程中要用到三个 Windows API 函数,它们是:

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

    。  LockWindowUpdate 函数:锁定当前窗口 
    。  GetDesktopWindow 函数:获取当前桌面窗口 
    。  SetParent 函数:将窗口放到指定的窗口中

  该过程主要原理是通过 SetParent 函数指定报表窗口的户窗口句柄 hWnd 来实现将报表窗口放置在指定口中。由于要用到窗口句柄 hWnd,而在 Access 只有窗体才具有窗口句柄 hWnd,因此我们用一个窗体来作为子窗体使用。在本文中,这个窗体名为 frmBack,具体属性设置如下:

    。  记录选择器:否 
    。  滚动条:两者均无 
    。  记录选择器:否 
    。  导航按钮:无 
    。  分隔线:无 
    。  自动调整:是 
    。  边框样式:无 
    。  图片:D:\我的文档\My Pictures\back-1.gif 
    。  图片缩放模式:拉伸
    其它均为默认值

  这样这个窗体既具有窗口句柄 hWnd,又可作为开始的背景使用。

  下面开始设计报表,在本文中报表名为 rpt1,按照正常报表进行设计,只有一个属性需要特别设置:

    。  弹出方式:是

  下面进行主窗体设计,在本文中窗体名为 frmOpenReportInSubForm,具体属性设置如下:

    。  标题:在子窗体中预览报表 
    。  滚动条:两者均无 
    。  记录选择器:否 
    。  导航按钮:否 
    。  分隔线:否 
    。  自动调整:是 
    。  自动居中:是 
    。  边框样式:对话框边框

  在窗体放上两个按钮:加载报表 cmdLoadRpt 和关闭报表 cmdCloseRPT,再放一个子窗体控件名为 subRPT,属性设置:

    。  源对象:frmBack

  好了,界面设置完毕,开始编写代码:

  Form_frmOpenReportInSubForm 代码如下:


Option Compare Database
Option Explicit

Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Form_Unload(Cancel As Integer)
    ' 关闭报表
    DoCmd.Close acReport, "rpt1"
End Sub

Private Sub cmdCloseRPT_Click()
    ' 关闭报表
    DoCmd.Close acReport, "rpt1"
End Sub

Private Sub cmdLoadRpt_Click()
    Dim mWnd As Long

    ' 锁定当前桌面
    LockWindowUpdate GetDesktopWindow
    ' 打开报表 rpt1
    DoCmd.OpenReport "rpt1", acViewPreview, , , acWindowNormal
    ' 获取报表窗体窗口句柄
    mWnd = Reports("rpt1").hwnd
    
    ' 设置报表的父窗口为子窗体
    SetParent mWnd, Me.subRPT.Form.hwnd

    ' 解锁当前桌面
    LockWindowUpdate False
    
    ' 选择报表对象,对其进行最大化
    DoCmd.SelectObject acReport, "rpt1"
    DoCmd.Maximize
End Sub


  好了,整个设计过程完毕,打开 frmOpenReportInSubForm,点击[加载报表]按钮,你看到什么?报表就在子窗体按件的位置打开了。

图片如下:
按此在新窗口浏览图片

源代码请参考:
http://access911.net/down/eg/API_SubForm_Report_Preview.rar
(176KB)


 

 
相关文章
     新手来看:如何在窗体中预览某个报表?
     以文字(路径)方式保存文件名的图片如何在报表中预览?
     如何将动态生成的ADO RECORDSET对象绑定到ACCESS报表?
     如何让 ACCESS 2000 支持弹出式报表?(思路及实现)
     新手来看:如何完成子窗体的记录跳转?
     新手来看:如何将窗体得筛选条件应用在对应得报表中?如何打印当前记录?如何打印指定记录?
     如何制作复杂报表——利用Excel输出复杂报表
     如何在主窗体中显示子窗体中相关数据的汇总值
     如何保存子窗体的动态查询结果(保存子窗体数据)?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利