XL 2016 VBA - Tester si le Menu Système est présent dans un UserForm

Dudu2

XLDnaute Barbatruc
Bonjour,

J'arrive à ajouter le Menu Système à un UserForm par contre je suis incapable de déterminer a postériori si ce Menu Système est présent ou pas.
Je ne sais pas comment traiter le iStyle pour retourner un booléen.
Voir le fichier joint (modifié à 22h30 car initialement bugué)
 

Pièces jointes

  • Test System Menu Present.xlsm
    30.9 KB · Affichages: 3
Dernière édition:
Solution

Dudu2

XLDnaute Barbatruc
Bonsoir,

Le Menu Système ajouté introduit la possibilité de minimiser le UserForm.
Je n'ai pas ajouté les options de maximisation et de redimensionnement manuel.

Donc AVEC:
1718398204427.png

et SANS:
1718398377409.png


Voilà ce qui ne fonctionne pas: le iStyle And WS_SYSMENU
Sachant que pour l'ajouter j'ai fait un iStyle = iStyle Or WS_SYSMENU
VB:
'---------------------------------------------
'Retourne True si le UserForm a le System Menu
'---------------------------------------------
Function UserFormHasSystemMenu() As Boolean
    Dim iStyle As LongPtr
 
    'Get the basic window styles
    iStyle = GetWindowLongPtr(UserFormHandle, GWL_STYLE)
    'MsgBox iStyle
 
    UserFormHasSystemMenu = CBool(iStyle And WS_SYSMENU)
End Function
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
ll n'y a aucune raison que la valeur renvoyée par GetWindowLong soit LongPtr. Elle devrait rester Long.
Il n'y a aucune raison non plus que le nom de l'API ait changé. Même le handle je ne suis pas sûr qu'il doit passer en LongPtr.
 

Discussions similaires