Accueil Fonctions Calc Menu Basic EDI OOo 1.x EDI OOo 2.x EDI LibO - OOo 3.x Affectation touche Affectation icône Etape par étape Macro débutant Fonctions Basic Dialogues OOo1-2 Dialogues LibO-OOo3 Quelques exemples Exemples dialogue Fonctions perso Définitions Recherche sur site


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

  1. Sub QuestionAugmentation
  2.   Dim oDialog As Object, oPDialog As Object
  3.   Dim oRetourOui As Object, oRetourNon As Object
  4.   Dim oTxt As Object
  5.  
  6.   DialogLibraries.LoadLibrary("Standard")
  7.   oDialog = DialogLibraries.Standard.Dialog1
  8.   oPDialog = CreateUnoDialog(oDialog)
  9.   exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
  10.   oTxt = oPDialog.getControl("Label1")
  11.   oTxt.Text = "Voulez-vous être augmenté ?"
  12.   oRetourOui = oPDialog.getControl("CommandButton1")
  13.   oRetourOui.Label = "OUI"
  14.   '
  15.   oRetourNon = oPDialog.getControl("CommandButton2")
  16.   oRetourNon.Label = "NON"
  17.   '
  18.   oPDialog.setTitle("Petit test")
  19.   '
  20.   iDialogResult = oPDialog.Execute()
  21.   '
  22.   If iDialogResult = exitOK Then
  23.     MsgBox("Va donc bosser !", 16, "")
  24.   Else
  25.     MsgBox("Félicitations", 64, "")
  26.   Endif
  27. End Sub

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

  1. Sub QuestionAugmentation
  2.   Dim oDialog As Object, oPDialog As Object
  3.   Dim oRetourOui As Object, oRetourNon As Object
  4.   Dim oTxt As Object
  5.  
  6.   DialogLibraries.LoadLibrary("Standard")
  7.   oDialog = DialogLibraries.Standard.Dialog1
  8.   oPDialog = CreateUnoDialog(oDialog)
  9.   exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
  10.   oTxt = oPDialog.getControl("Label1")
  11.   oTxt.Text = "Voulez-vous être augmenté ?"
  12.   oRetourOui = oPDialog.getControl("CommandButton1")
  13.   oRetourOui.Label = "OUI"
  14.   '
  15.   oRetourNon = oPDialog.getControl("CommandButton2")
  16.   oRetourNon.Label = "NON"
  17.   '
  18.   oPDialog.setTitle("Petit test")
  19.   '
  20.   oPDialog.Model.CommandButton1.Height = 10
  21.   oPDialog.Model.CommandButton1.Width = 15
  22.   '
  23.   iDialogResult = oPDialog.Execute()
  24.   '
  25.   If iDialogResult = exitOK Then
  26.     MsgBox("Va donc bosser !", 16, "")
  27.   Else
  28.     MsgBox("Félicitations", 64, "")
  29.   Endif
  30. End Sub

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

  1. Sub InfoSouris(Event As Object)
  2.   xs = Event.X
  3.   If xs10 And xs70 Then
  4.     oPDialog.Model.CommandButton1.PositionX = 70
  5.   Else
  6.     oPDialog.Model.CommandButton1.PositionX = 10
  7.   Endif
  8. End Sub

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

  1. Dim oPDialog As Object
  1. Sub InfoSouris(Event As Object)
  2.   xs = Event.X
  3.   If xs10 And xs70 Then
  4.     oPDialog.Model.CommandButton1.PositionX = 70
  5.   Else
  6.     oPDialog.Model.CommandButton1.PositionX = 10
  7.   Endif
  8. End Sub
  1. Sub QuestionAugmentation
  2.   Dim oDialog As Object
  3.   Dim oRetourOui As Object, oRetourNon As Object
  4.   Dim oTxt As Object
  5.  
  6.   DialogLibraries.LoadLibrary("Standard")
  7.   oDialog = DialogLibraries.Standard.Dialog1
  8.   oPDialog = CreateUnoDialog(oDialog)
  9.   exitOK = com.sun.star.ui.dialogs.ExecutableDialogResults.OK
  10.   oTxt = oPDialog.getControl("Label1")
  11.   oTxt.Text = "Voulez-vous être augmenté ?"
  12.   oRetourOui = oPDialog.getControl("CommandButton1")
  13.   oRetourOui.Label = "OUI"
  14.   '
  15.   oRetourNon = oPDialog.getControl("CommandButton2")
  16.   oRetourNon.Label = "NON"
  17.   '
  18.   oPDialog.setTitle("Petit test")
  19.   '
  20.   oPDialog.Model.CommandButton1.Height = 10
  21.   oPDialog.Model.CommandButton1.Width = 15
  22.   '
  23.   iDialogResult = oPDialog.Execute()
  24.   '
  25.   If iDialogResult = exitOK Then
  26.     MsgBox("Va donc bosser !", 16, "")
  27.   Else
  28.     MsgBox("Félicitations", 64, "")
  29.   Endif
  30. End Sub

 

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
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France License.

  .

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é