--- Soumis par Dev Ashish---
Élimine le message "Printing".
(Q) Comment éliminer le message "Printing" qui accompagne la demande d'impression d'un rapport (état) sur imprimante?
(A) Ce message est interne à Access et ne peut, en soi, être caché directement depuis le code.
Par contre, en utilisant un Timer, on peut minimiser ce message peu après qu'il se soit affiché. La fenête ne peut être restaurée, et elle est automatiquement détruire une fois que l'ouvrage d'impression est localement terminée.
Note: le message reste visible jusqu'à ce que la procédure événementielle ne se déclanche, ce qui dépend de la valeur de la proprité TimerInterval du formulaire, et pendant le temps que met Access à exécuter le code suivant.
L'utilisation de la procédure événementielle du Timer est cruciale, ici, car c'est la seule procédure qui continue à être déclanchable même si Access présente un formulaire ou un message en mode modal.
Créer un formulaire (que vous ouvrez en mode caché) et affecter sa propriété TimerInterva là 300 ( trois dixièmes de seconde). La procédure événementielle devient
Private Sub Form_Timer()
Call sWatchAccess(Application.hWndAccessApp)
End Sub
Maintenant, du formulaire ayant la commande d'impression de l'état, ajouter le code requis en s'inspirant du code suivant:
Private Sub Command0_Click() On Error Resume Next DoCmd.OpenForm "Form2" DoEvents: DoEvents: DoEvents DoCmd.OpenReport "Sales by Category", acViewNormal DoCmd.Close acForm, "Form2" End Sub
où Form2 est le formulaire caché avec son Timer en fonction.
'************* Code Start *************
Private Declare Function apiGetClassName Lib "user32" _
Alias "GetClassNameA" _
(ByVal hWnd As Long, _
ByVal lpClassname As String, _
ByVal nMaxCount As Long) _
As Long
Private Declare Function apiGetWindowText Lib "user32" _
Alias "GetWindowTextA" _
(ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal aint As Long) _
As Long
Private Declare Function apiGetLastActivePopup Lib "user32" _
Alias "GetLastActivePopup" _
(ByVal hWndOwnder As Long) _
As Long
Private Declare Function apiShowWindow Lib "user32" _
Alias "ShowWindow" _
(ByVal hWnd As Long, _
ByVal nCmdShow As Long) _
As Long
Private Const MAX_LEN = 255
Private Const GW_HWNDNEXT = 2
Private Const SW_HIDE = 0
Private Const SW_MINIMIZE = 6
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWDEFAULT = 10
Sub sWatchAccess(ByVal hWndApp As Long)
'Requis: hWndAccessApp (poignée de référence à l'Application )
'
On Error GoTo Err_Handler
Dim lnghWndChild As Long
Dim strCaption As String
Dim strClass As String
Dim lngRet As Long
'Obtenir la dernière fenêtre popup de l'instance d'application hWndApp
lnghWndChild = apiGetLastActivePopup(hWndApp)
strClass = fGetClassName(lnghWndChild)
strCaption = fGetCaption(lnghWndChild)
'est-ce une fenpetre modale?
If strClass = "#32770" And Trim(strCaption) = "Printing" Then
lngRet = apiShowWindow(lnghWndChild, SW_SHOWMINNOACTIVE)
End If
Exit_Here:
Exit Sub
Err_Handler:
MsgBox "Error #: " & Err.Number & vbCrLf & Err.Description, _
vbCritical + vbOKOnly, "sWatchAccess-Runtime Error"
Resume Exit_Here
End Sub
Private Function fGetClassName(ByVal hWnd As Long) As String
Dim strBuffer As String
Dim lngRet As Long
strBuffer = String$(32, 0)
lngRet = apiGetClassName(hWnd, strBuffer, Len(strBuffer))
If lngRet > 0 Then
fGetClassName = Left$(strBuffer, lngRet)
End If
End Function
Private Function fGetCaption(ByVal hWnd As Long) As String
Dim strBuffer As String
Dim lngRet As Long
strBuffer = String$(MAX_LEN, 0)
lngRet = apiGetWindowText(hWnd, strBuffer, Len(strBuffer))
If lngRet > 0 Then
fGetCaption = Left$(strBuffer, lngRet)
End If
End Function
'************ Code End ***************