[Résolu][Calc] Assignation script et création d'un controle

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 !
Gerfaud
NOOuvel adepte
NOOuvel adepte
Messages : 20
Inscription : 18 nov. 2012 08:42

[Résolu][Calc] Assignation script et création d'un controle

Message par Gerfaud »

Bonjour,

Je souhaite créer un formulaire dynamique avec Calc.
Les contrôles seront créés directement sur la feuille. Je ne passe pas par une boite de dialogue.
Je prends pour l'instant seulement le cas d'un champ date.
J'ai besoin d'affecter une macro, au contrôle que je crée, pour déclencher une action après l'avoir quitté.
Dans les propriétés du contrôle il existe un onglet nommé "évènements". Je voudrais donc affecter une macro sur la perte du focus.
Comment affecter, lors de la création dynamique du contrôle, une macro à l'un des évènements listés ?

Je joins un fichier contenant un bouton qui crée le contrôle.
Le code crée le contrôle puis tente d'affecter la macro en utilisant un "ScriptEventDescriptor" comme évoqué dans différent code que j'ai pu trouver sur le forum.
La date saisie dans le controle devrait s'afficher dans la cellule "A1" mais ce n'est pas le cas.(cette action ne fait que vérifier que le listener est actif)
Je n'ai pas d'erreur signalé par l'EDI. Je comprends qu'il doit manquer des instructions ou que certaines ne sont pas correctement affectées.
Je n'ai pas su trouver la réponse en explorant l'API.
Les éléments de code utilisés sont de Alain de la Chaume et Pierre-Yves Samyn.

Merci pour vos réponses
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Gerfaud le 17 déc. 2012 08:49, modifié 3 fois.
Libre Office 6.3.5, 6.2.6, 5.3.7, 5.0.6.3,
MacOS X 10.11.6
Win 10
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par Grenouille »

Bonsoir,
Gerfaud a écrit :Les éléments de code utilisés sont de Alain de la Chaume et Pierre-Yves Samyn.
Peux-tu nous donner les liens vers ces fils ?
Cela permettrait de voir du code qui fonctionne et le comparer avec le tien.

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
Gerfaud
NOOuvel adepte
NOOuvel adepte
Messages : 20
Inscription : 18 nov. 2012 08:42

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par Gerfaud »

Bonsoir et Merci pour ton intervention.

Voici le fil qui m'a permit de démarrer.
http://forum.openoffice.org/fr/forum/vi ... 88#p197565
Ce code fonctionne pour un bouton (je viens de le verifier) mais ne semble pas fonctionner sur un autre type de controle.
La macro est affectée dans l'évènement "exécuter l'action" pour un bouton. Mais cet évènement n'est pas présent pour un champs date.
Je cherche une solution pour affecter une macro à l'évènement "perte du focus" qui est, lui, présent dans le magasin du controle DateField.
Libre Office 6.3.5, 6.2.6, 5.3.7, 5.0.6.3,
MacOS X 10.11.6
Win 10
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 957
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par luky-luke »

Bonsoir,

J'ai tester ton fichier, en pas à pas dans l'EDI. Dans le défilement en testant la valeur Formulaire.count, on voit qu'on ne la voit pas !!!J'ai modidier les formulaire.count en 0 (zéro) et tout fonctionne.

Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 7.4.7.2 Raspberry pi (Trixie) et Libo 7.6.5.2 LinuxMint 22
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Gerfaud
NOOuvel adepte
NOOuvel adepte
Messages : 20
Inscription : 18 nov. 2012 08:42

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par Gerfaud »

Bonjour,

Merci. Effectivement cela marche et la macro est bien présente dans la bonne rubrique des evenements du controle DateField.
Je croyais qu'il s'agissait de l'index du controle dans le formulaire mais l'index du controle est (1) dans le formulaire.
J'avais mis formulaire.count en pensant utiliser l'index du dernier contrôle créé.
Avant de considérer la question comme résolue je souhaiterais savoir à quoi correspond cet index.
Quel objet cible-t-il ?
Libre Office 6.3.5, 6.2.6, 5.3.7, 5.0.6.3,
MacOS X 10.11.6
Win 10
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 957
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par luky-luke »

Bonsoir Gerfaud,

Si c'est pour que tu mette résolu....Alors, je vais répondre à une 2° question dans le même fil :aie:
En même temps, mon précédent message est un peu abrupte :wink: Donc quelques explications
Gerfaud a écrit :J'avais mis formulaire.count en pensant utiliser l'index du dernier contrôle créé.
Formulaire.count te renvoi le nombres de forme dans ta feuille. Avant l'insertion du champ date il y a une forme. C'est le bouton. Après l'insertion du champs date il y a 2 formes, le bouton et le champs date.

En donnant la valeur zéro, je force l'index du champs date, celui du bouton se décale et passe à 1. L'avantage de forcer l'index c'est de connaitre à l'avance l'évènement que tu cherche à intercepter. Je ne sais pas par contre si c'est une "bonne façon" de coder.

J'espère ne pas avoir écris de con/.../ies.

Cordialement
Luke
LibO 7.4.7.2 Raspberry pi (Trixie) et Libo 7.6.5.2 LinuxMint 22
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Gerfaud
NOOuvel adepte
NOOuvel adepte
Messages : 20
Inscription : 18 nov. 2012 08:42

Re: [Calc] Assignation d'une macro à la création d'un contro

Message par Gerfaud »

Bonsoir Lucky-Luke,

J'ai fini de ronger l'os que tu m'as donné :-)
Merci d'avoir accepté d'argumenter ta réponse car cela m'a permis de comprendre le mécanisme d'assignation de macro.
J'ai adapté mon code pour le rendre réutilisable. J'en ai fait une création dynamique d'un controle DateField "avec une cellule liée" (ces controles n'ont pas de cellule liée).
Je n'ai finalement pas conservé l'index 0 pour insérer le controle et la macro car cela engendre ce qui me parait être une "discordance" de lecture avec les informations données par Xray.
En effet, même en "forçant" l'index d'insertion du controle à 0, il s'affiche en dernière position dans ControlModels du formulaire (et pas en position zero).
Dans le tableau getScriptEvents (toujours du formulaire) la macro est en positon 0 et est pourtant fonctionnellement liée au controle qui est affiché en dernière position dans le ControlModels de Xray ce qui me parait curieux :alerte:
Cela m'a permis de comprendre qu'en insérant le controle en dernière position (formulaire.count) dans controlModels et en utilisant la dernière position pour l'index d'insertion de la macro ("formulaire.count - 1" dans le tableau ScripEvents car formulaire.count a évolué de + 1 entre temps comme tu me l'as expliqué) on respecte une certaine "chronologie logique" des deux éléments (le controle et sa macro) qui ont alors la même valeur d'index (dernière position) et le résultat fonctionnel est le même.
je cloture donc ma question.
je joins un nouveau fichier nettoyé de ce qui me paraissait superflue.
merci encore :P

Cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 6.3.5, 6.2.6, 5.3.7, 5.0.6.3,
MacOS X 10.11.6
Win 10