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
[Résolu][Calc] Assignation script et création d'un controle
Modérateur : Vilains modOOs
Règles du forum
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 !
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

- Messages : 20
- Inscription : 18 nov. 2012 08:42
[Résolu][Calc] Assignation script et création d'un controle
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
MacOS X 10.11.6
Win 10
-
Grenouille
- 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
Bonsoir,
Cela permettrait de voir du code qui fonctionne et le comparer avec le tien.
A+
Peux-tu nous donner les liens vers ces fils ?Gerfaud a écrit :Les éléments de code utilisés sont de Alain de la Chaume et Pierre-Yves Samyn.
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

- Messages : 20
- Inscription : 18 nov. 2012 08:42
Re: [Calc] Assignation d'une macro à la création d'un contro
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.
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
MacOS X 10.11.6
Win 10
-
luky-luke
- 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
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
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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
-
Gerfaud
- NOOuvel adepte

- Messages : 20
- Inscription : 18 nov. 2012 08:42
Re: [Calc] Assignation d'une macro à la création d'un contro
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 ?
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
MacOS X 10.11.6
Win 10
-
luky-luke
- 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
Bonsoir Gerfaud,
Si c'est pour que tu mette résolu....Alors, je vais répondre à une 2° question dans le même fil
En même temps, mon précédent message est un peu abrupte
Donc quelques explications
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
Si c'est pour que tu mette résolu....Alors, je vais répondre à une 2° question dans le même fil
En même temps, mon précédent message est un peu abrupte
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.Gerfaud a écrit :J'avais mis formulaire.count en pensant utiliser l'index du dernier contrôle créé.
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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
-
Gerfaud
- NOOuvel adepte

- Messages : 20
- Inscription : 18 nov. 2012 08:42
Re: [Calc] Assignation d'une macro à la création d'un contro
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
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
Cordialement
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
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
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
MacOS X 10.11.6
Win 10