IN THE SPOTLIGHT: MDE to MDB Conversion Service
(also supports: ACCDE to ACCDB, ADE to ADP, etc)
IN THE SPOTLIGHT: Access Database Repair Service
An in-depth repair service for corrupt Microsoft Access files
IN THE SPOTLIGHT: vbWatchdog
VBA error handling just got easier...
" vbWatchdog is off the chart. It solves a long standing problem of how to consolidate error handling into one global location and avoid repetitious code within applications. "
- Joe Anderson,
Microsoft Access MVP
Meet Shady, the vbWatchdog mascot watching over your VBA code →
(courtesy of Crystal Long, Microsoft Access MVP)
IN THE SPOTLIGHT: vbMAPI
An Outlook / MAPI code library for VBA, .NET and C# projects
Get emails out to your customers reliably, and without hassle, every single time.
Use vbMAPI alongside Microsoft Outlook to add professional emailing capabilities to your projects.
IN THE SPOTLIGHT: Code Protector
Standard compilation to MDE/ACCDE format is flawed and reversible.
To remove the Minimize, Maximize, and Restore button from a Report's preview window, we have to create a custom toolbar to allow the user to close the report and use some API functions to remove the caption bar from the preview window. This way, once you maximize the Report, the preview pane will occupy the entire Access screen without automatically enabling the restore and other buttons.
For reference, here are the steps I've used:
DoCmd.Close acReport, Me.Name
Dim CanClose as Integer
In Open:
CanClose = 0
In 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
DoCmd.OpenReport "TheReport", acViewPreview,... Call sRemoveCaption(Reports("TheReport")
What happens as a result of this effort: Your user can
That's all. If they try to close the Access app, they get returned to the main menu. There are no buttons to min, max or close the report window itself.
'********************* 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 **************************
Rate this article:
iTech Masters | VAT: GB202994606 | Terms | Sitemap | Newsletter