Autres articles / Other articles

Affichage de boites modales

publication: 15 novembre 2024 / mis à jour 28 novembre 2024

Read this page in english

 


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:

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:

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:

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:

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