[Basic]Récupérer valeur bouton radio

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Basic]Récupérer valeur bouton radio

Messagepar Piaf » 08 Août 2018 18:53

Bonjour
Suite à ce fil : [Résolu][Calc] Récupérer valeur boutons radio
Je vous propose trois façons de récupérer la valeur stockée dans la propriété Complément d’information d’un bouton radio sélectionné.
Tuto.png

Une méthode par le groupe d'options
Une par les contrôles boutons radio
et une sur l'événement des boutons.
Pièces jointes
BoutonsRadio.odt
(13.05 Kio) Téléchargé 31 fois
Dernière édition par Piaf le 08 Août 2018 19:44, édité 4 fois.
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5565
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Basic]Récupérer valeur bouton radio

Messagepar Piaf » 08 Août 2018 19:00

Première méthode : récupération du groupe d’options.
Il s’agit d’un nom commun donné à chaque bouton radio (propriété Nom du groupe dans LibO. La propriété n’existe pas dans AOO mais la solution semble fonctionner).
Option.png

Elle est expliquée dans la bible dans le chapitre sur les contrôles de formulaire (le choix 1 parmi N) et dans le Basic Guide Control Element Forms in Detail pour les contrôles de formulaire mais fonctionne également pour les contrôles de dialogue.
Nous allons utiliser la méthode : getGroupByName
https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/XTabControllerModel.html#getGroupByName
Le premier argument est un nom commun à tous les boutons radio, il est à déclarer en Object ou en Variant et renvoi un tableau contenant les boutons radio des différentes options.
Le second, à déclarer en Object permet de boucler sur chaque bouton.
Code : Tout sélectionner   AgrandirRéduire
Sub Group
Dim oDlg as Object, Choix() as Variant, oOption as Object
   DialogLibraries.LoadLibrary("Standard")
   oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
   If oDlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      oDlg.model.getGroupByName("Eval",Choix())
      For Each oOption In Choix()
         If oOption.State Then
            MsgBox("Vous avez selectionné l'option " & oOption.Label & Chr(13) & "Le complément d'information a pour valeur " & oOption.tag,0,"Boutons radio")
         End If   
      Next   
   End If      
End Sub

La macro renvoie l’étiquette et la valeur du complément d’information du bouton sélectionné à la fermeture du dialogue.
Dernière édition par Piaf le 08 Août 2018 19:39, édité 1 fois.
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5565
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Basic]Récupérer valeur bouton radio

Messagepar Piaf » 08 Août 2018 19:19

Seconde méthode, Boucler sur chaque bouton radio
On crée un tableau des noms des différents boutons radio.
Dans une boucle For Next, si le bouton est sélectionné, on récupère la valeur du complément d’information et on sort de la boucle (Une seule option pouvant être sélectionnée).
Code : Tout sélectionner   AgrandirRéduire
Sub Control
Dim oDlg as Object, NomBouton as Variant, Choix As Object, i as Integer
   NomBouton = Array("Option1","Option2","Option3","Option4")
   DialogLibraries.LoadLibrary("Standard")
   oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
   If oDlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      For i = 0 To UBound(NomBouton)
         Choix = oDlg.getControl(NomBouton(i)).Model
         If Choix.State Then
            MsgBox("Vous avez selectionné l'option " & Choix.Label & Chr(13) & "Le complément d'information a pour valeur " & Choix.tag,0,"Boutons radio")
            Exit For
         End If
      Next i   
   End If      
End Sub

La macro renvoie l’étiquette et la valeur du complément d’information du bouton sélectionné à la fermeture du dialogue.
Dernière édition par Piaf le 08 Août 2018 19:40, édité 1 fois.
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5565
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Basic]Récupérer valeur bouton radio

Messagepar Piaf » 08 Août 2018 19:36

Troisième méthode utiliser l’événement Statut de l’élément modifié.
Event.png

Si le statut passe à sélectionné, on récupère la valeur du complément d’information dans une variable qui sera récupérée à la fermeture du dialogue.
Code : Tout sélectionner   AgrandirRéduire
Dim Valeur as Integer

Sub Event
Dim oDlg as Object, Choix As Object
   DialogLibraries.LoadLibrary("Standard")
   oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog2)
   Valeur = -1
   If oDlg.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
      If Valeur > -1 Then
         MsgBox("Une option a été choisie, la valeur de retour est " & Valeur,0,"Boutons radio")
      End If   
   End If   
End Sub

Sub RecupValeur(oEv as Object)
Dim Ctrl as Object
   Ctrl = oEv.Source.Model
   If Ctrl.State Then
      MsgBox("Vous avez selectionné l'option " & Ctrl.Label & Chr(13) & "Le complément d'information a pour valeur " & Ctrl.tag,0,"Boutons radio")
      Valeur = Ctrl.Tag
   End If         
End Sub

La macro RecupValeur est déclenchéé à la sélection des boutons radio. Elle enregistre la valeur voulue et affiche l’étiquette et la valeur du complément d’information du bouton sélectionné.
La macro Event renvoie la valeur enregistrée à la fermeture du dialogue.
A+
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5565
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane


Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot] et 1 invité