| 
          
            | APIs: Éliminer le message  "Printing" | Author(s)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être 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 propreté  
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 SubMaintenant, 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. 
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)
  On Error GoTo Err_Handler
  Dim lnghWndChild As Long
  Dim strCaption As String
  Dim strClass As String
  Dim lngRet As Long
  
  
  lnghWndChild = apiGetLastActivePopup(hWndApp)
  strClass = fGetClassName(lnghWndChild)
  strCaption = fGetCaption(lnghWndChild)
  
  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
 |