[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 !

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

Messagepar hcm » 25 Nov 2020 10:28

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   AgrandirRéduire
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.
Pièces jointes
Recettes_cuisine_v97.odb
(157.3 Kio) Téléchargé 12 fois
Dernière édition par hcm le 27 Nov 2020 20:42, édité 2 fois.
LibO Version: 6.4.6.2 distribution Linux Lubuntu 20.04.01 LTS
hcm
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 120
Inscrit le : 03 Jan 2007 22:16

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

Messagepar Dude » 25 Nov 2020 13:40

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.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar hcm » 25 Nov 2020 13:55

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
hcm
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 120
Inscrit le : 03 Jan 2007 22:16

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

Messagepar Dude » 25 Nov 2020 14:31

hcm a écrit:récupérer les infos sélectionnées dans le contrôle de table

https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=49673&hilit=Selection+contr%C3%B4le+table
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar hcm » 25 Nov 2020 14:50

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/viewtopic.php?f=8&t=49673&hilit=Selection+contr%C3%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
hcm
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 120
Inscrit le : 03 Jan 2007 22:16

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

Messagepar Dude » 25 Nov 2020 19:16

Le plus simple reste à tester lors du clic sur le bouton s'il y a ou non une sélection.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar hcm » 25 Nov 2020 20:26

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
hcm
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 120
Inscrit le : 03 Jan 2007 22:16

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

Messagepar Dude » 27 Nov 2020 10:05

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.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar hcm » 27 Nov 2020 16:18

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   AgrandirRéduire
' 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
hcm
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 120
Inscrit le : 03 Jan 2007 22:16


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)