[Résolu][Base]-Capter la sélection dans un contrôle de table

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

[Résolu][Base]-Capter la sélection dans un contrôle de table

Message par hcm »

Bonjour,

Dans un fil précédent, j'avais posé plusieurs questions dont je pensais qu'elles étaient toutes résolues.
En fait, il en reste une en suspens (le point 1), qui consiste à capter l'évènement de changement de sélection sur un champ de type contrôle de table.

Le solution proposée (qui me semblait adaptée jusqu'à que je l'intègre dans mon code) ne fonctionne pas dans mon cas, car l'objet sur lequel s'applique le code est, selon Xray, de type stardiv.Toolkit.GridControl.
Or l'objet crée dans mon formulaire, toujours selon Xray, est de type com.sun.star.form.OGridControlModel

J'ai donc essayé d'adapté le code proposé pour qu'il colle avec mon type d'objet, ce qui donne:

Code : Tout sélectionner

action = CreateUnoListener( "RR" & "_", "com.sun.star.view.XSelectionChangeListener" )
tableControle.addSelectionChangeListener( action )
Ce code se compile et s’exécute sans erreur, mais lorsque je sélectionne un élément dans le contrôle de table, la fonction RR_selectionChanged() n'est pas invoquée.
A l'ouverture du formulaire, c'est la macro ALOuvertureDuFormulaire qui est invoquée et qui tente de mettre en place l'écoute sur l'évènement de changement de sélection.

J'ai beau consulter l'API je ne vois pas quelle erreur j'ai commise.

Pour mettre en œuvre ce code, il suffit d'ouvrir le formulaire RechercheParmiLesRecettes, et pour avoir des éléments à sélectionner, il faut appuyer sur le bouton "Lancer la recherche".

Merci pour votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par hcm le 27 nov. 2020 19:42, modifié 2 fois.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25165
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Capter la sélection dans un contrôle de table

Message par Dude »

Salut,
hcm a écrit :J'ai donc essayé d'adapté le code proposé pour qu'il colle avec mon type d'objet, ce qui donne:
Qu'est ce que tu cherches à faire exactement ? Décris le but et pas la méthode.
Ton contrôle est forcément relié à une table. C'est sur celle-ci que tu dois agir pour modifier une donnée.
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Capter la sélection dans un contrôle de table

Message par hcm »

Salut Dude,

Ce que je cherche à faire, c'est de pouvoir activer/désactiver les boutons présents en bas du formulaire lorsque un ou plusieurs enregistrements sont sélectionnés dans le contrôle de table.
Lorsque ces boutons seront utilisés, il faudra pouvoir récupérer les infos sélectionnées dans le contrôle de table pour ouvrir un autre formulaire qui affichera toutes les données de ces enregistrements.

Le premier exemple que tu m'avais donné (dans le fil précédent) fait exactement cela, mais sur un autre type d'objet (au sens de l'API). cf post 1 de ce fil.
J'ai voulu faire évoluer le code proposé, sans succès. Mon besoin est donc de capter le moment où on sélectionne ou désélectionne un enregistrement dans le contrôle de table.

Est-ce plus clair ainsi ?
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25165
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Capter la sélection dans un contrôle de table

Message par Dude »

hcm a écrit :récupérer les infos sélectionnées dans le contrôle de table
https://forum.openoffice.org/fr/forum/v ... B4le+table
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Capter la sélection dans un contrôle de table

Message par hcm »

Dude a écrit :
hcm a écrit :récupérer les infos sélectionnées dans le contrôle de table
https://forum.openoffice.org/fr/forum/v ... B4le+table
Là dessus on est d'accord. Reste à capter l'évènement de sélection/désélection. Et c'est là dessus que je bloque.
hcm a écrit :Mon besoin est donc de capter le moment où on sélectionne ou désélectionne un enregistrement ... (afin) de pouvoir activer/désactiver les boutons présents en bas du formulaire
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25165
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Capter la sélection dans un contrôle de table

Message par Dude »

Le plus simple reste à tester lors du clic sur le bouton s'il y a ou non une sélection.
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Capter la sélection dans un contrôle de table

Message par hcm »

Mais le bouton doit rester inactif tant qu'il n'y a pas de sélection.

Y'a vraiment pas moyen de reproduire, avec ce type d'objet (com.sun.star.form.OGridControlModel) ce que tu avais fait dans le fil que tu m'avais donné dans ma demande précédente ?
J'avais l'impression que l'usage de addSelectionChangeListener() devait répondre à ce problème ...
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25165
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] - Capter la sélection dans un contrôle de table

Message par Dude »

Un contrôle de table n'est pas un contrôle ordinaire. C'est un assemblage d'autres contrôles (texte, numérique, liste...).
Je n'ai pas testé mais il y a l'événement "Réception de focus".
Tu le branches sur une macro qui active le bouton.
hcm
Membre hOOnoraire
Membre hOOnoraire
Messages : 125
Inscription : 03 janv. 2007 21:16

Re: [Base] - Capter la sélection dans un contrôle de table

Message par hcm »

Dude a écrit :Je n'ai pas testé mais il y a l'événement "Réception de focus".
Cet évènement provoque un appel en boucle (infinie) de la macro dès qu'on clique sur le contrôle de table.

Par contre, j'ai affecté la macro à l'évènement "Bouton de la souris relâché", et il la macro est appelée au bon moment.

Pour récupérer activer/désactiver les boutons et récupérer les lignes sélectionnées, j'ai utilisé le code suivant dans la macro.

Code : Tout sélectionner

' Invoquée lors du relâchement de bouton dans le contrôle de table
Sub RR_selectionChanged(f_evt as object)

dim index as Integer
Dim controleDeTable, vueGrille As Object
Dim formRecherche, formResultats As Object
Dim lignesSelectionnees As Variant

    formRecherche       = ThisComponent.drawpage.forms.getbyname("FormRechercheDesRecettes")
    formResultats       = formRecherche.getByName("FormResultats")
    controleDeTable     = formResultats.getByName("ResultatsRecherche")
    vueGrille           = ThisComponent.currentcontroller.getcontrol(controleDeTable)
    lignesSelectionnees = vueGrille.selection
    
	If ( ubound(lignesSelectionnees) >= 0) Then
		' Il y a au moins une ligne sélectionnée
		' On active tous les boutons pouvant travailler sur le resultat
		chgtEtatBoutonsResultats( formRecherche, 1 )

	Else
		' On désactive tous les boutons pouvant travailler sur le resultat
		chgtEtatBoutonsResultats( formRecherche, 0 )
	End If
  
End Sub
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS