Page 1 sur 1

Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 1:17
par majikeyric
Yop :)

J'ai essayé de créer un menu avec des lettres soulignées en mettant un '&' avant la bonne lettre.
Mais elles ne s'affichent pas à l'exécution, je suis sous Windows 7 et pas sous XP (j'ai vu qu'il y avait une option à décocher pour celui-ci).

J'ai pourtant d'autres applis (genre ultraedit) qui affichent bien un menu avec des lettres soulignées...

Y a que les applis PB qui ne les affichent pas... comme l'IDE aussi.

J'ai rien trouvé sur le fofo qui m'expliquerait d'où cela vient.

Re: Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 1:39
par falsam
C'est la faute de Microsoft :mrgreen:

Le réglage est à faire avec le panneau de configuration de Windows7.
1 - Panneau de configuration
2 - Lien options d'ergonomie.
3 - de nouveau le lien Options d'ergonomie sur la page qui vient de s'afficher.
4 - Rendre le clavier plus facile à utiliser.
5 - Cocher la case Souligner les raccourcis clavier et les touches d’accès rapides.

Simple non ? :p

Re: Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 8:45
par Marc56
majikeyric a écrit :Yop :)

J'ai essayé de créer un menu avec des lettres soulignées en mettant un '&' avant la bonne lettre.
Mais elles ne s'affichent pas à l'exécution, je suis sous Windows 7 et pas sous XP (j'ai vu qu'il y avait une option à décocher pour celui-ci).

J'ai pourtant d'autres applis (genre ultraedit) qui affichent bien un menu avec des lettres soulignées...

Y a que les applis PB qui ne les affichent pas... comme l'IDE aussi.

J'ai rien trouvé sur le fofo qui m'expliquerait d'où cela vient.
Depuis Windows XP (ou 2000?), en configuration "d'usine" (c'est à dire Windows installé mais non modifié) les raccourcis clavier ne s'affichent que si on appuie au moins une fois sur l'une ou l'autre des touches ALT.

On peut changer ce comportement par défaut dans le panneau de configuration comme l'a indiqué Falsam

:wink:

Re: Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 9:57
par Mesa
Il existe une solution sous Windows :

Code : Tout sélectionner

Global pvParam.i
;Si problème, remplacer pvParam.i par pvParam.l

; On interroge le système
If SystemParametersInfo_(#SPI_GETKEYBOARDCUES, 0, @pvParam, 0)

; Si Menu non souligné par défaut
If pvParam = 0 
  SystemParametersInfo_(#SPI_SETKEYBOARDCUES, 0, #True, 0) ; alors on force le soulignement
EndIf

If OpenWindow(0, 200, 200, 200, 100, "Exemple MenuItem")
  If CreateMenu(0, WindowID(0))
    MenuTitle("&Projet")
    MenuItem(1, "Ouvrir")                   ; Elément normal
    MenuItem(2, "&Enregistrer")             ; Elément avec une lettre soulignée.
    MenuBar()                               
    MenuItem(3, "&Quitter"+Chr(9)+"ECHAP")  ; Elément avec un raccourci clavier affiché sur la droite.
  EndIf
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

;Debug pvParam
If pvParam = 0 ; Si Menu était non souligné par défaut, on rétablit le système
  SystemParametersInfo_(#SPI_SETKEYBOARDCUES, 0, #False, 0)
EndIf

Else
  MessageRequester("Attention", "Problème avec la fonction SystemParametersInfo")
EndIf

End


;=========== API WINDOWS ============
; http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947%28v=vs.85%29.aspx  
;  BOOL WINAPI SystemParametersInfo(
;   _In_     UINT uiAction,
;   _In_     UINT uiParam,
;   _Inout_  PVOID pvParam,
;   _In_     UINT fWinIni
;   )

;

; SPI_GETKEYBOARDCUES = $100A
; Determines whether menu access keys are always underlined. 
; The pvParam parameter must point To a BOOL variable that receives TRUE 
; If menu access keys are always underlined, And FALSE If they are 
; underlined only when the menu is activated by the keyboard.


; SPI_SETKEYBOARDCUES = 0x100B
; Sets the underlining of menu access key letters. 
; The pvParam parameter is a BOOL variable. 
; Set pvParam To TRUE To always underline menu access keys, 
; Or FALSE To underline menu access keys only when the menu is activated 
; from the keyboard.
; SPI_SETMENUUNDERLINES = 0x100B
; Same As SPI_SETKEYBOARDCUES.
La fonction SystemParametersInfo_ permet de changer plein de réglages du système comme la vitesse de la souris, le contraste de l'écran (sous condition), etc.

M.

Re: Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 11:31
par falsam
Code archivé. Merci Mesa pour ce partage. :)

J'ai modifié la fin du code afin de rétablir la configuration utilisateur du menu quand on quitte l'application.

Code : Tout sélectionner

Else
  spiflagerror = #True
  MessageRequester("Attention", "Problème avec la fonction SystemParametersInfo")
EndIf

If spiflagerror = #False And pvParam = 0
  SystemParametersInfo_(#SPI_SETKEYBOARDCUES, 0, #False, 0)
EndIf

End

Re: Menu et lettres soulignées (&)

Publié : mer. 12/févr./2014 21:28
par majikeyric
Merci pour vos réponses :)

micro$oft aurait pu le mettre par défaut ?!!

cool l'astuce par programmation de Mesa !

@falsam, je n'ai pas compris ta modif, le code de Mesa rétablit bien la valeur d'avant lancement du prog ?

Re: Menu et lettres soulignées (&)

Publié : jeu. 13/févr./2014 1:57
par falsam
majikeyric a écrit :@falsam, je n'ai pas compris ta modif, le code de Mesa rétablit bien la valeur d'avant lancement du prog ?
En principe non.

Re: Menu et lettres soulignées (&)

Publié : jeu. 13/févr./2014 2:05
par majikeyric

Code : Tout sélectionner

;Debug pvParam
If pvParam = 0 ; Si Menu était non souligné par défaut, on rétablit le système
  SystemParametersInfo_(#SPI_SETKEYBOARDCUES, 0, #False, 0)
EndIf