Bonjour,
je viens de terminer un formulaire sous InfoPath 2007 dont je souhaite désactiver la croix de fermeture dans la fenêtre où s'ouvre le formulaire.
J'ai déjà fait des recherches et j'ai trouvé le code suivant:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, ByVal revert As Integer) As Integer
Private Declare Function EnableMenuItem Lib "user32" (ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer
Private Const SC_CLOSE As Integer = &HF060
Private Const MF_BYCOMMAND As Integer = &H0
Private Const MF_GRAYED As Integer = &H1
Private Const MF_ENABLED As Integer = &H0
Public Shared Sub Disable(ByVal form As System.Windows.Forms.Form)
' The return value specifies the previous state of the menu item (it is either
' MF_ENABLED or MF_GRAYED). 0xFFFFFFFF indicates that the menu item does not exist.
Select Case EnableMenuItem(GetSystemMenu(form.Handle.ToInt32, 0), SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED)
Case MF_ENABLED
Case MF_GRAYED
Case &HFFFFFFFF
Throw New Exception("La croix pour fermer n'existe pas.")
Case Else
End Select
End Sub |
Il me suffit ensuite d'appeler la procédure "Disable" dans le code événement Form_loading et le tour est joué.
Mais ça ne marche pas comme ça:
- Pour appeler "Disable", j'ai besoin de pointer sur une instance de System.Windows.Forms.Form
- Tout ce que j'ai c'est une instance de la classe Microsoft.Office.InfoPath.XmlForm, ou à la rigueur de Microsoft.Office.InfoPath.Window
- Dans ces objets, je n'ai aucun lien avec la classe System.Windows.Forms.Form ou System.Windows (un essai de cast me renvoie que mes deux classes sont incompatibles)
Je pense avoir donné un maximum d'éléments, mais je n'ai pas codé depuis très longtemps, et l'objet est une notion encore floue.
Note: je programme en VB sous Visual Studio 2005.
Merci d'avance de m'aider à trouver la solution.
Partager