Boîtes de dialogues. Petit test 2/2
Accès direct pages : Petit test 1/2, Petit test 2/2, Nuancier, Carte club 1/3, Carte club 2/3, Carte club 3/3,
Suite de la page 1
Dialog003
Petites améliorations. Pour simplifier la suite, on déclare en ligne 9 une variable exitOK correspondante à l'API du bouton Ok. En ligne 22 modifiée, la lecture est plus simple. A noter que nous pouvons ajouter une instruction comme suit :
exitAnnuler = com.sun.star.ui.dialogs.ExecutableDialogResults.CANCEL
Cette instruction devient utile s'il y a plus de 2 boutons (OK, Annuler). Ce n'est pas le cas de cet exemple.
Si vous voulez en savoir plus sur cette API, il faut lire la documentation de référence, en anglais ici
Enfin, vous avez pu remarquer lors des tests les titres désagréables des MsgBox. Ici on les supprime (inutiles) et on ajoute une info.
Continuons notre petit programme qui va devenir progressivement un piège pour l'utilisateur... mais aussi pour vous !
Dialog004
Nous avons inséré 2 lignes (20 et 21) qui modifient la taille du bouton OUI. Pour cet exemple, il reste à des valeurs acceptables. Mais vous pouvez encore réduire... Mais il est possible d'être encore plus vicieux en désactivant le bouton OUI et en ajoutant ligne 22 cette instruction :
oPDialog.Model.CommandButton1.Enabled = False
Le bouton est désactivé par False (équivalence de CommandButton, Activé Oui / Non). Cette fois-ci, l'utilisateur n'aura d'autre choix que de cliquer sur NON.
Vous avez testé ? Supprimez cette ligne 22
Continuons. Vous avez du voir cet exemple avec le bouton qui se dérobe dès que vous l'approchez. Nous allons maintenant faire la même chose avec le bouton OUI.
Il va falloir d'abord gérer les déplacements de la souris dans la boite de dialogue. Nous allons donc créer une macro
Dialog005 partiel
Cette macro teste les événements en X (en horizontal) de la souris, avec l'instruction Event.X en ligne 2. On peut ajouter des tests en Y avec Event.Y, mais pour notre exemple, ce petit test suffit. Les valeurs seront peut-être à adapter sur votre machine selon les emplacements de boutons.
Pour que cette macro puisse fonctionner, il est indispensable de la "brancher". Comme il s'agit d'un déplacement à l'intérieur de la boîte complète, c'est depuis la boîte Dialog1 que nous allons procéder. D'abord en la sélectionnant, puis dans les propriétés de Dialog, onglet Evénements. Nous allons opter pour Déplacement de la souris, ce qui signifie qu'à chaque déplacement de la souris dans la zone de la boite de dialogue, la macro sera appelée. |
Nous allons assigner la macro comme ci-contre |
Puis sélectionner la macro voulue dans la liste (Attention, les listes seront sans doute différentes sur votre machine), puis OK. |
En retour nous aurons le lien automatique de "branchement" de la macro |
Ensuite, si vous exécutez le programme, vous allez avoir droit à ce message. Il va d'ailleurs être compliqué d'en sortir. Pourquoi ? Parce que vous allez cliquer sur OK, puis essayer de fermer la boîte Dialog1, mais comme vos déplacements de souris sont interprêtés à chaque mouvement (je vous l'avais bien dit...), vous recréez la même erreur. Pour en sortir, c'est tout simple. Sortez d'abord la souris de la zone de Dialog1, puis servez vous de la touche Entrée pour valider le message d'erreur. Ensuite ramenez le curseur de souris sur la croix de fermeture (sans rentrer dans Dialog1, sauf sur la croix). Ouf ! |
STOP Ceci n'explique pas le pourquoi de cette erreur. Avant d'aller plus loin, réfléchissez un instant.
Réponse oPDialog n'est pas déclaré. On le trouve bien dans la macro QuestionAugmentation, mais pas dans InfoSouris. Pourtant on parle de la même chose et c'est utile dans les 2 macros. La solution est de supprimer l'instruction Dim oPDialog As Object de la macro QuestionAugmentation et de placer cette instruction Dim oPDialog As Object en dehors des macros de sorte que cette instruction soit valable pour toutes les macros de ce module.
Dialog005 complet
Remarque l'ordre des macros dans le module est sans incidence.
Si vous avez tout suivi, votre macro fonctionne parfaitement. Le bouton OUI s'esquive à chaque approche. Cependant tout n'est pas parfait puisqu'il est toujours possible de le faire fonctionner avec la touche Entrée. Mais si vous avez tout lu, ce n'est pas difficile d'interdire cette possibilité.
STOP Il existe plusieurs solutions pour avoir toujours NON comme seule solution possible (via le clavier). Cherchez-en quelques unes.
Réponses
Il doit y en avoir d'autres...
Et maintenant, à vos claviers.
Ce site n'est plus mis à jour. Merci aux nombreux visiteurs depuis 2003. Consultez le Wiki LibreOffice. |
|||||
Le tableur Calc par l'exemple : christianwtd@free.fr
|
. | Site optimisé pour Firefox |
Dernière modification : 13/09/2010 à 15h35
Déjà plusieurs visites sur ce site depuis quelque temps (au moins vous et moi) |
| Compteur non certifié |