[Basic] Tout sur le contrôle 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.
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

[Basic] Tout sur le contrôle bouton radio

Message par Piaf »

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é 756 fois
Dernière modification par Piaf le 08 août 2018 20:44, modifié 4 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Récupération du groupe d’options

Message par Piaf »

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/com ... roupByName

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

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 modification par Piaf le 08 août 2018 20:39, modifié 1 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Boucler sur chaque bouton radio

Message par Piaf »

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

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 modification par Piaf le 08 août 2018 20:40, modifié 1 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Gérer les boutons radio via évènement

Message par Piaf »

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

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.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

[Basic] Fonction boutons radio groupés pour formulaire

Message par Dude »

Sous OpenOffice, les boutons radio fonctionnent automatiquement à condition qu'ils aient le même nom.
Cela pose alors un problème d'identification quand il faut intervenir ou interagir sur l'un des items.

La fonction RadioGroup permet de résoudre plusieurs cas :
  • Savoir quel item est coché
  • Connaître l'état d'un item tel que (dé)coché ou (in)actif
  • Forcer la coche sur un item
  • Désactiver ou activer un item
  • Modifier le libellé d'un item
  • Changer la couleur de fond d'un item
Très pratique puisqu'elle s'appelle avec le nom du groupe et/ou le libellé de l'item.
Pièces jointes
GroupBox_Radios.odt
(15.16 Kio) Téléchargé 110 fois
Verrouillé