Affichage de boites modales
publication: 15 novembre 2024 / mis à jour 28 novembre 2024
Une boîte modale, c'est un peu comme un panneau d'arrêt qui surgit sur l'écran de l'ordinateur.
C'est une petite fenêtre apparaîssant, recouvrant tout ou partie de la page. Cette fenêtre, c'est une boîte modale:
- pour attirer l'attention. Elle signale quelque chose d'important, comme une confirmation à donner, un choix à faire ou une information à lire;
- pour demander une action. Elle peut demander de remplir un formulaire, de cliquer sur un bouton ou de prendre une décision avant de pouvoir continuer;
- pour informer. Elle peut afficher un message d'erreur, une confirmation de réussite ou simplement donner une information supplémentaire.
C'est le mot "modale" qui est important ici. Il signifie qu'il faut agir avec cette boîte avant de pouvoir continuer à utiliser le reste de l'application. C'est comme répondre à une question avant de pouvoir passer à la suite.
Exemple concret: quand on veut supprimer un fichier sur l'ordinateur, une boîte modale apparaît souvent pour demander de confirmer la décision. Il faut cliquer sur "Oui" ou "Non" avant que le fichier soit effectivement supprimé.
MessageBoxA
Le mot MessageBoxA
est défini dans le vocabulaire windows
.
Paramètres:
- hWnd Handle pour la fenêtre propriétaire de la boîte de message à créer. Si ce paramètre a la valeur NULL, la zone de message n’a pas de fenêtre propriétaire;
- lpText Message à afficher. Si la chaîne se compose de plusieurs lignes, vous pouvez séparer les lignes à l’aide d’un retour chariot et/ou d’un caractère de saut de ligne entre chaque ligne.
- lbCaption Titre de la boîte de dialogue. Si ce paramètre a la valeur NULL, le titre par défaut est Erreur.
- uType Contenu et comportement de la boîte de dialogue. Ce paramètre peut être une combinaison d’indicateurs des groupes d’indicateurs qu'on va voir plus en détail après.
Contenu et comportement de la boîte de dialogue
Exemple de boite modale:
only also windows also graphics internals : MSGbox NULL z" Beware, message test!" NULL MB_OK MessageBoxA ?dup if cr ." You have pressed: " . then ; : run MSGbox key drop ;
L'exécution de run
affiche ceci:

Dans le vocabulaire windows
, les constantes préfixées MB sont associées à MessageBoxA
:
0 constant MB_OK 1 constant MB_OKCANCEL 2 constant MB_ABORTRETRYIGNORE 3 constant MB_YESNOCANCEL 4 constant MB_YESNO 5 constant MB_RETRYCANCEL 6 constant MB_CANCELTRYCONTINUE
Elles correspondent au paramètre uType et sélectionnent les boutons affichés dans la boite modale:
MB_OK
La boîte de message contient un bouton d’envoi : OK. Il s’agit de la valeur par défaut.MB_OKCANCEL
La boîte de message contient deux boutons pousseurs : OK et Annuler.MB_ABORTRETRYIGNORE
La boîte de message contient trois boutons d’envoi : Abandonner, Réessayer et Ignorer.MB_YESNOCANCEL
La boîte de message contient trois boutons pousseurs : Oui, Non et Annuler.MB_YESNO
La boîte de message contient deux boutons pousseurs : Oui et Non.MB_RETRYCANCEL
La boîte de message contient deux boutons d’envoi : Réessayer et Annuler.MB_CANCELTRYCONTINUE
La boîte de message contient trois boutons d’envoi : Annuler, Réessayer, Continuer. Utilisez ce type de boîte de message au lieu deMB_ABORTRETRYIGNORE
.
Valeur retournée
Si une zone de message comporte un bouton Annuler, la fonction retourne la valeur 2 si vous appuyez sur la touche Échap ou si le bouton Annuler est sélectionné.
Si la boîte de message n’a pas de bouton Annuler, appuyer sur Échap n’aura aucun effet, sauf si un bouton
MB_OK
est présent. Si un bouton MB_OK
s’affiche et que l’utilisateur appuie sur Échap, la valeur de retour est 1.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur,
utiliser GetLastError
.
Si la fonction réussit, la valeur de retour est l’une des valeurs d’élément de menu suivantes:
- 3 Le bouton Abandonner a été sélectionné.
- 2 Le bouton Annuler a été sélectionné.
- 11 Le bouton Continuer a été sélectionné.
- 5 Le bouton Ignorer a été sélectionné.
- 7 Le bouton Non a été sélectionné.
- 1 Le bouton OK a été sélectionné.
- 4 Le bouton Réessayer a été sélectionné.
- 10 Le bouton Réessayer a été sélectionné.
- 6 Le bouton Oui a été sélectionné.
Voyons ceci avec un exemple pratique.
Explications supplémentaires
Voici quelques informations sur le comportement de MessageBoxA
.
: lpText r" You must make a choice:
Yes to continue
No to stop" s>z ;
z" make a choice" constant lpCaption
: MSGbox ( -- )
NULL lpText lpCaption MB_YESNO MessageBoxA
?dup if
cr ." You have pressed: "
case
1 of ." OK" endof
6 of ." Yes" endof
7 of ." No" endof
endcase
else
cr ." You canceled the operation."
then
;
Ici, le mot MessageBoxA
suspend l'exécution de MSGbox
. La boite modale agit comme
key
dans une application Forth non graphique.

Le mot lpCaption
définit le message qui sert de titre à la boite modale.
Le mot lpText
contient le message à afficher dans la boite modale.
Pour afficher un texte sur plusieurs lignes dans la boite modale, il faut redéfinir lpText
comme ceci:
: lpText r" You must make a choice: Yes to continue No to stop" s>z ; z" make a choice" constant lpCaption

Définition du bouton par défaut
Vous pouvez désigner un bouton par défaut. Voici les constantes nécessaires pour sélectionner un bouton:
$00000000 constant MB_DEFBUTTON1 $00000100 constant MB_DEFBUTTON2 $00000200 constant MB_DEFBUTTON3 $00000300 constant MB_DEFBUTTON4
Si vous avez une boite modale avec un choix entre deux boutons, vous ne pouvez utiliser que
MB_DEFBUTTON1
ou MB_DEFBUTTON2
.
Exemple:
: MSGbox ( -- )
NULL lpText lpCaption
MB_YESNO MB_DEFBUTTON2 or
MessageBoxA
?dup if
cr ." You have pressed: "
case
1 of ." OK" endof
6 of ." Yes" endof
7 of ." No" endof
endcase
else
cr ." You canceled the operation."
then
;
Ici, la séquence MB_YESNO MB_DEFBUTTON2
or sélectionne le second bouton par défaut.
Résultat:
Rajout d'une icone dans la boite modale
Vous pouvez rajouter une icone qui accroit l'importance du contenu de la boite modale, parmi ces options:
$00000010 constant MB_ICONHAND $00000020 constant MB_ICONQUESTION $00000030 constant MB_ICONEXCLAMATION $00000040 constant MB_ICONASTERISK

Intégration dans le code Forth:
... MB_YESNO MB_DEFBUTTON2 or MB_ICONEXCLAMATION or MessageBoxA ...
Résultat:

En résumé, nous avons, avec les fenêtres modales, un moyen simple et efficace pour interagir avec un programme écit en Forth. Une fenêtre modale ne nécessite pas de réorganiser l'affichage dans la fenêtre parent.
Legal: site web personnel sans commerce / personal site without seling