Détection de fermeture

patou100 - 14 déc. 2001 à 17:37
 Makabey - 14 déc. 2001 à 19:45
Comment peut on détecter la fermeture d'une form par la croix (en haut à droite)?
Ou comment supprimer la croix sur une form sans supprimer le button min et max?

Merci de vos réponses

1 réponse

Pour détecter la fermeture par la croix vois la fonction QueryUnload de ta form; il suffit d'utiliser ce code pour l'intercepter:

If UnloadMode = vbFormControlMenu Then
    'Fermeture par la croix
  Else
    'Fermeture autrement tel:
    'vbFormCode	: "Unload {form}" est appellé
    'vbAppWindows : Windows se termine
    'vbAppTaskManager : Tué par Ctrl+Alt+Del
    'vbFormMDIForm : un Enfant MDI se termine pcq son parent se ferme
End If

'
'Désactiver la croix:
'

'windows constants for CloseMenu
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
'Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_REMOVE = &H1000&
'/windows constants for CloseMenu

Public Sub DesactiveX(ByRef frm As Form)
   Dim hMenu As Long
   Dim nCount As Long
   
   hMenu = GetSystemMenu(frm.hwnd, 0)
   nCount = GetMenuItemCount(hMenu)
           
   RemoveMenu hMenu, nCount - 1, MF_REMOVE Or MF_BYPOSITION 'Call
   RemoveMenu hMenu, nCount - 2, MF_REMOVE Or MF_BYPOSITION 'Call

   DrawMenuBar frm.hwnd
End Sub

Sub Form_Load
  DesactiveX Me
End Sub
0
Rejoignez-nous