会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 报表打印 > 正文

移除报表预览窗口的Min/Max/Close按钮

时间:2004-11-23 22:02 来源:Accessfaq 作者:zhuyiwen… 阅读:
作    者:Terry Kreft & Keri Hardwick  
发布日期:2002年11月13日
摘    要:从报表的预览窗口上移除最小化、最大化以及复原按钮,创建一个自定义的工具条让用户来关闭报表以及使用某些API函数来移除预览窗口上的标题栏。使用这种方法,一旦最大化报表,预览窗口将占据整个access的屏幕窗口而不出现允许复原按钮恢复原来窗口的大小以及不出现其它按钮。

正    文:

  从报表的预览窗口上移除最小化、最大化以及复原按钮,创建一个自定义的工具条让用户来关闭报表以及使用某些API函数来移除预览窗口上的标题栏。使用这种方法,一旦最大化报表,预览窗口将占据整个access的屏幕窗口而不出现允许复原按钮恢复原来窗口的大小以及不出现其它按钮。

涉及的使用步骤如下:

1. 在每个报表的Deactivate事件处理程序中写入

DoCmd.Close acReport, Me.Name

2. 在一个总是打开的主菜单中放置一个唯一的退出数据库的按钮,并在引用报表的窗口(frmStart)中定义:
Dim CanClose as Integer

在窗体的Open事件处理程序中写入: 
CanClose = 0

在窗体的Unload事件处理程序中写入: 
If Not CanClose Then
    Cancel = True
    Forms!frmStart.Visible = True
    'form is hidden when report is previewed
    DoCmd.SelectObject acForm, "frmStart"
    CloseForms
    CloseReports
    ' CloseForms and CloseReports close any open objects
    ' other than frmStart

End If

3. 使用每个窗体的Open事件处理程序写入DoCmd.Maximize。
4. 为打印建立一个定置的工具条,放置关闭以及其它的功能按钮。设置报表的菜单为"-1",在工具条上做两个限制用户使用的操作。
5. 使用下面的代码预览报表:

DoCmd.OpenReport "TheReport", acViewPreview,...
Call sRemoveCaption(Reports("TheReport")

这样的话,用户就能:

  1. 看到报表 
  2. 在工具条操作
  3. 最小化access

  好了,如果用户想关闭access,可以主菜单来做到,但在报表预览窗口没有最小化、最大化以及关闭按钮。

'********************* Code Start ************************
'This code was originally written by Terry Kreft & Keri Hardwick.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Terry Kreft & Keri Hardwick
'

Private Type RECT  '  16  Bytes
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type
 
Private Declare Function apiGetWindowLong Lib "User32" _
    Alias "GetWindowLongA" _
    (ByVal hwnd As Long, _
    ByVal nIndex As Long) _
    As Long
 
Private Declare Function apiSetWindowLong Lib "User32" _
    Alias "SetWindowLongA" _
    (ByVal hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) _
    As Long
 
Private Declare Function apiGetWindowRect Lib "User32" _
    Alias "GetWindowRect" _
    (ByVal hwnd As Long, _
    lpRect As RECT) _
    As Long
 
Private Declare Function apiGetSystemMetrics Lib "User32" _
    Alias "GetSystemMetrics" _
    (ByVal nIndex&) _
    As Long
 
Private Declare Function apiReleaseDC Lib "User32" _
  Alias "ReleaseDC" _
  (ByVal hwnd As Long, _
  ByVal hDC As Long) _
  As Long
 
Private Declare Function apiGetDeviceCaps Lib "Gdi32" _
    Alias "GetDeviceCaps" _
    (ByVal hDC As Long, _
    ByVal nIndex As Long) _
    As Long
 
Private Declare Function apiGetDC Lib "User32" _
    Alias "GetDC" _
    (ByVal hwnd As Long) _
    As Long
 
Private Declare Function IsZoomed Lib "User32" _
    (ByVal hwnd As Long) As Long
 
Private Declare Function ShowWindow Lib "User32" _
    (ByVal hwnd As Long, _
    ByVal nCmdShow As Long) As Long
 
Private Declare Function MoveWindow Lib "User32" _
    (ByVal hwnd As Long, _
    ByVal x As Long, _
    ByVal Y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal bRepaint As Long) As Long
 
Private Declare Function GetParent Lib "User32" _
    (ByVal hwnd As Long) As Long
 
'Use following instead of GetWindowRect
Private Declare Function GetClientRect Lib "User32" _
    (ByVal hwnd As Long, _
    lpRect As RECT) As Long
 
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNORMAL = 1
Private Const GWL_EXSTYLE = -20
Private Const GWL_HINSTANCE = -6
Private Const GWL_HWNDPARENT = -8
Private Const GWL_ID = -12
Private Const GWL_STYLE = -16
Private Const GWL_USERDATA = -21
Private Const GWL_WNDPROC = -4
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const SM_CYCAPTION = 4  ' Height of caption or title
Private Const TWIPSPERINCH = 1440
'**  Window Style Constants
Private Const WS_DLGFRAME& = &H400000
Private Const WS_THICKFRAME& = &H40000

Sub aTest()
    DoCmd.OpenReport "Report1", acViewPreview
    Call sRemoveCaption(Reports!Report1)
End Sub
 
Private Sub MaximizeRestoredReport(R As Report)
'This code was originally written by Terry Kreft
'Full credits and acknowledgements to him.
'

Dim MDIRect As RECT
    ' If the Report is maximized, restore it.
    If IsZoomed(R.hwnd) <> 0 Then
        ShowWindow R.hwnd, SW_SHOWNORMAL
    End If
 
    
' Get the screen coordinates and window size of the
    ' MDIClient area.
    'This is the line which is different

    GetClientRect GetParent(R.hwnd), MDIRect
 
    
' Move the Report to the upper left corner of the MDIClient
    ' window (0,0) and size it to the same size as the
    ' MDIClient window.

 
    MoveWindow R.hwnd, 0, 0, MDIRect.right - MDIRect.left, _
        MDIRect.bottom - MDIRect.top, True
End Sub
 
Sub sRemoveCaption(rpt As Report)
 
Dim lngRet As Long, lngStyle As Long
Dim tRECT As RECT, lngX As Long
Dim lngCaptionWidth As Long
Dim lngLeft As Long
Dim lngTop As Long
Dim lngWidth As Long
Dim lngHeight As Long
 
    lngRet = apiGetWindowLong(rpt.hwnd, GWL_STYLE)
    lngStyle = (lngRet Xor WS_DLGFRAME Xor _
                    WS_THICKFRAME) And Not WS_CAPTION
    'Need the Xor above to keep window from being sizable
    lngRet = apiSetWindowLong(rpt.hwnd, GWL_STYLE, lngStyle)
    lngX = apiGetWindowRect(rpt.hwnd, tRECT)
 
    
'have to resize the form now
    'how much was caption's screenspace

    lngCaptionWidth = apiGetSystemMetrics(SM_CYCAPTION)
 
    With tRECT
        lngLeft = .left
        lngTop = .top
        lngWidth = .right - .left
        lngHeight = .bottom - .top - lngCaptionWidth
        ConvertPIXELSToTWIPS lngLeft, lngTop
        ConvertPIXELSToTWIPS lngWidth, lngHeight
        DoCmd.SelectObject acReport, rpt.Name, False
        DoCmd.Restore
        DoCmd.MoveSize lngLeft, lngTop, lngWidth, lngHeight
    End With
 
    'now use Terry's code here
    Call MaximizeRestoredReport(rpt)
 End Sub
 
Sub ConvertPIXELSToTWIPS(x As Long, Y As Long)
    'From the KB
    Dim hDC As Long, hwnd As Long, RetVal As Long
    Dim XPIXELSPERINCH, YPIXELSPERINCH
    Const LOGPIXELSX = 88
    Const LOGPIXELSY = 90
 
    hDC = apiGetDC(0)
    XPIXELSPERINCH = apiGetDeviceCaps(hDC, LOGPIXELSX)
    YPIXELSPERINCH = apiGetDeviceCaps(hDC, LOGPIXELSY)
    RetVal = apiReleaseDC(0, hDC)
    x = (x / XPIXELSPERINCH) * TWIPSPERINCH
    Y = (Y / YPIXELSPERINCH) * TWIPSPERINCH
End Sub
'************************ Code End **************************

翻译 朱亦文


来 源 于:MVPS: The access Web

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: