Tabarnak
-
2 oct. 2001 à 15:22
rdelesalle
Messages postés3Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention20 février 2009
-
16 juin 2008 à 10:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
rdelesalle
Messages postés3Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention20 février 2009 16 juin 2008 à 10:47
Bonjour.
Avec le code ci-dessous, je n'ai pas le problème.
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, ByVal bRevert As Integer) As Integer
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Integer) As Integer
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Integer) As Integer
Private Const MF_BYPOSITION As Integer = &H400
Private Const MF_REMOVE As Integer = &H1000
Private Sub DesactivePartieMenu()
Dim hMenu As Integer
Dim nCount As Integer
Dim hwnd As Int32 = Me.Handle.ToInt32
hMenu = GetSystemMenu(hwnd, 0)
nCount = GetMenuItemCount(hMenu)
RemoveMenu(hMenu, 4, MF_REMOVE Or MF_BYPOSITION) 'Suppression AGRANDIR
RemoveMenu(hMenu, 2, MF_REMOVE Or MF_BYPOSITION) 'Suppression TAILLE
RemoveMenu(hMenu, 0, MF_REMOVE Or MF_BYPOSITION) 'Suppression RESTAURER
DrawMenuBar(hwnd)
End Sub
Bon courage.
dreamsworks
Messages postés8Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention28 novembre 2009 14 juin 2008 à 18:43
Merci rdelesalle, ce probleme est résolu.
Mais un autre problème se produit lors du débogage : j'ai le message "PInvokeStackImbalance a été détecté" aux lignes 35, 38, 41, 42, 43 et 44. A ce moment là, les variables lItemCount, lRet et lSysMenu sont au alentour de 9E18. J'ai remarqué que cette valeur est en dehors de la plage de Long, je suis donc passé en single, mais cela n'a rien changé.
rdelesalle
Messages postés3Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention20 février 2009 26 mai 2008 à 09:40
Dim hwnd As Int32 = Me.Handle.ToInt32
dreamsworks
Messages postés8Date d'inscriptionjeudi 15 mai 2008StatutMembreDernière intervention28 novembre 2009 19 mai 2008 à 11:18
Je travaille sur Visual Studio 2005 et je rencontre le même problème que Laurent.
VS m'indique que "hwnd n'est pas un membre de Monformulaire".
j'ai tenté plusieurs fois mais rien n'y fait.
Aidez-moi !
merci
laurent colas
Messages postés3Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention 9 mars 2008 10 févr. 2008 à 11:06
Salut a tous.
Je suis avec VB2005 express et impossible de pourvoir utiliser hwnd. j'ai essaye a mainte reprise et cela me donne systématiquement a l'écriture du code :
"hwnd n'est pas un membre de mao.form1"
si quelqu'un a une idée?
merci
sunshune
Messages postés14Date d'inscriptionjeudi 13 mars 2003StatutMembreDernière intervention25 février 2006 6 oct. 2003 à 15:06
Felicitations
Depuis longtemps ke je cherche le moyen de faire cela.
Merci encore.
1000/20
Cordialement,
indianajones59
Messages postés23Date d'inscriptionjeudi 31 janvier 2002StatutMembreDernière intervention10 février 2003 25 déc. 2002 à 19:04
parfait !
MagicManu
Messages postés19Date d'inscriptiondimanche 22 octobre 2000StatutMembreDernière intervention23 janvier 2008 5 juin 2002 à 20:45
Comment faire pour réactiver la croix ?
Genre une fonction ReactiverX
Merci d'avance.
cs_Astalavista
Messages postés192Date d'inscriptionlundi 24 décembre 2001StatutMembreDernière intervention 3 février 2010 28 mars 2002 à 22:45
Pour ceux qui veulen que la Form soit encore deplacable mettez :
Public Sub DesactiverX(f_hwnd As Long)
Dim lSysMenu As Long
Dim lItemCount As Long
Dim lRet As Long
lSysMenu = GetSystemMenu(f_hwnd, False)
lItemCount = GetMenuItemCount(lSysMenu)
lRet = RemoveMenu(lSysMenu, lItemCount - 1, MF_BYPOSITION)
lRet = RemoveMenu(lSysMenu, lItemCount - 3, MF_BYPOSITION)
lRet = RemoveMenu(lSysMenu, lItemCount - 4, MF_BYPOSITION)
End Sub
En gros, le programme supprime le menu 'Fermer' (liste du menu lors du clic en haut à gauche de la feuille VB) et désactive le X de Fermer.
Plus en détail :
- la fonction API "GetSystemMenu" sert à prendre le menu qui apparaît lors du clic en haut à gauche du form (sous-menus "Restaurer", "Déplacer", "Réduire", "Fermer", ...)
- "GetMenuItemCount" sert à connaître le nombre de sous-menus dans ce même menu.
- "RemoveMenu" sert à enlever un de ces sous-menus.
16 juin 2008 à 10:47
Avec le code ci-dessous, je n'ai pas le problème.
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, ByVal bRevert As Integer) As Integer
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Integer) As Integer
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Integer) As Integer
Private Const MF_BYPOSITION As Integer = &H400
Private Const MF_REMOVE As Integer = &H1000
Private Sub DesactivePartieMenu()
Dim hMenu As Integer
Dim nCount As Integer
Dim hwnd As Int32 = Me.Handle.ToInt32
hMenu = GetSystemMenu(hwnd, 0)
nCount = GetMenuItemCount(hMenu)
RemoveMenu(hMenu, 4, MF_REMOVE Or MF_BYPOSITION) 'Suppression AGRANDIR
RemoveMenu(hMenu, 2, MF_REMOVE Or MF_BYPOSITION) 'Suppression TAILLE
RemoveMenu(hMenu, 0, MF_REMOVE Or MF_BYPOSITION) 'Suppression RESTAURER
DrawMenuBar(hwnd)
End Sub
Bon courage.
14 juin 2008 à 18:43
Mais un autre problème se produit lors du débogage : j'ai le message "PInvokeStackImbalance a été détecté" aux lignes 35, 38, 41, 42, 43 et 44. A ce moment là, les variables lItemCount, lRet et lSysMenu sont au alentour de 9E18. J'ai remarqué que cette valeur est en dehors de la plage de Long, je suis donc passé en single, mais cela n'a rien changé.
26 mai 2008 à 09:40
19 mai 2008 à 11:18
VS m'indique que "hwnd n'est pas un membre de Monformulaire".
j'ai tenté plusieurs fois mais rien n'y fait.
Aidez-moi !
merci
10 févr. 2008 à 11:06
Je suis avec VB2005 express et impossible de pourvoir utiliser hwnd. j'ai essaye a mainte reprise et cela me donne systématiquement a l'écriture du code :
"hwnd n'est pas un membre de mao.form1"
si quelqu'un a une idée?
merci
6 oct. 2003 à 15:06
Depuis longtemps ke je cherche le moyen de faire cela.
Merci encore.
1000/20
Cordialement,
25 déc. 2002 à 19:04
5 juin 2002 à 20:45
Genre une fonction ReactiverX
Merci d'avance.
28 mars 2002 à 22:45
Public Sub DesactiverX(f_hwnd As Long)
Dim lSysMenu As Long
Dim lItemCount As Long
Dim lRet As Long
lSysMenu = GetSystemMenu(f_hwnd, False)
lItemCount = GetMenuItemCount(lSysMenu)
lRet = RemoveMenu(lSysMenu, lItemCount - 1, MF_BYPOSITION)
lRet = RemoveMenu(lSysMenu, lItemCount - 3, MF_BYPOSITION)
lRet = RemoveMenu(lSysMenu, lItemCount - 4, MF_BYPOSITION)
End Sub
3 oct. 2001 à 13:33
3 oct. 2001 à 10:21
Plus en détail :
- la fonction API "GetSystemMenu" sert à prendre le menu qui apparaît lors du clic en haut à gauche du form (sous-menus "Restaurer", "Déplacer", "Réduire", "Fermer", ...)
- "GetMenuItemCount" sert à connaître le nombre de sous-menus dans ce même menu.
- "RemoveMenu" sert à enlever un de ces sous-menus.
2 oct. 2001 à 18:40
dites moua, c possible d'expliquer ce ke font exactement ces api svp ? meme en faisant des test j'arrive po a savouar ce ke ca fé précisément...
2 oct. 2001 à 15:23
2 oct. 2001 à 15:22