Make your own free website on Tripod.com

Home
Home

--- 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 ***************