places ca dans un module....
Public Const GWL_STYLE = (-16)
Public Const WS_DISABLED = &H8000000
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
' le premier parametre est le handle (Form1.hwnd) d'un fenetre dont tu es sur qu'elle n'est pas modale
' le second, s'il est specifié, est le handle de la fenetre a tester , la fonction renvoie alors Vrai ou Faux , selon si elle est modale
'sinon, renvoie simplement True , si il y a une ( n'importe laquelle !) fenetre modale...
Public Function IsAnyModal(NonModal As Long, Optional TestHwnd As Long = -1) As Boolean
'recupere le style de la feuille non modale
Dim WinStyle As Long
WinStyle = GetWindowLong(NonModal, GWL_STYLE)
If (WinStyle And WS_DISABLED) = WS_DISABLED Then
'une feuille modal est presente
If TestHwnd = -1 Then
'on atteste de la presence d'une feuille modale
IsAnyModal = True
Else
' on verifie si c'est la fenetre a tester...
WinStyle = GetWindowLong(TestHwnd, GWL_STYLE) IsAnyModal Not ((WinStyle And WS_DISABLED) WS_DISABLED)
End If
Else
'pas de feuille modale
IsAnyModal = False
End If
End Function
le principe est très bete : quand un form modal est affichée , toutes les autres fenetres ont le Style Disabled défini.
il suffit de tester le style d'une fenetre (non modale !!) pour savoir si une fenetre modale est affichée.
j'ai ajouté aussi une option , savoir si une fenetre particuliere est modale...
-----------------------------------------------------------------------
By Renfield
thomas_reynald@msn.com
Aucune touche n'a été bléssée lors de la saisie de ce texte..........