[Résolu][Calc]Ajouter Contrôle dans boite de dialogue
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 !
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 !
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
[Résolu][Calc]Ajouter Contrôle dans boite de dialogue
Bonsoir,
Je voudrai créer dynamiquement, par macro, un champ numérique dans une boite de dialogue existante.
Merci de votre aide.
Je viens de voir l'exemple de Dude. http://user.services.openoffice.org/fr/ ... +dynamique
Je vais l'étudier et revenir vers vous si je rencontre des problèmes.
Je voudrai créer dynamiquement, par macro, un champ numérique dans une boite de dialogue existante.
Merci de votre aide.
Je viens de voir l'exemple de Dude. http://user.services.openoffice.org/fr/ ... +dynamique
Je vais l'étudier et revenir vers vous si je rencontre des problèmes.
Dernière modification par Drake le 12 nov. 2019 00:38, modifié 3 fois.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour
Je sors mon colt
Avec 258 messages au compteur un minimum de recherche s'impose avant de poser une question
Donc un petit tour dans les suprêmes
Gestion dynamique de dialogue
J'ai dégainé trop vite
Un indice pour faciliter la chose
Luke
Je sors mon colt
Avec 258 messages au compteur un minimum de recherche s'impose avant de poser une question
Donc un petit tour dans les suprêmes
Gestion dynamique de dialogue
J'ai dégainé trop vite
Un indice pour faciliter la chose
Cordialement"com.sun.star.awt.UnoControlNumericFieldModel"
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
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
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
re,
Je n'y arrive pas
J'ai essayé d'adapter le code de Dude mais ça ne marche pas.
J'ai fait un petit bout de code pour faire des essais.
Quelqu'un pourrait y jeter un œil et me dire pourquoi ça ne fonctionne pas ?
Je n'y arrive pas
J'ai essayé d'adapter le code de Dude mais ça ne marche pas.
J'ai fait un petit bout de code pour faire des essais.
Quelqu'un pourrait y jeter un œil et me dire pourquoi ça ne fonctionne pas ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
-
- PassiOOnné
- Messages : 501
- Inscription : 11 mai 2013 00:11
- Localisation : Aix en Provence
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour,
Cordialement,
Merci d'être plus précis, explique ce qui ne fonctionne pasDrake a écrit : [...] ça ne marche pas.
Le fichier joint ne comporte aucune macro...Drake a écrit :J'ai fait un petit bout de code pour faire des essais
Ajout : Sur la base du script de Dude, essaye ceci, à insérer dans ton code: Code : Tout sélectionner
|
Dernière modification par Noonours le 10 nov. 2019 23:41, modifié 1 fois.
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour
Ta Macro n'était pas dans le document... Un exemple d'ajout d'un champ numérique dans une boite de dialogue (nom par défaut Dialog1)construite à partir de l'EDI ou il n'y a qu'un bouton de validation OK présent,
+1 je suis d'accord avec Noonours c'est un peu court
Cordialement
Luke
Ta Macro n'était pas dans le document... Un exemple d'ajout d'un champ numérique dans une boite de dialogue (nom par défaut Dialog1)construite à partir de l'EDI ou il n'y a qu'un bouton de validation OK présent,
Code : Tout sélectionner
Sub Insert_ChampNum
Dim oDlg As Object, oNumModel As Object, oNumControl As Object
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oNumModel = oDlg.Model.createInstance( "com.sun.star.awt.UnoControlNumericFieldModel" )
oDlg.Model.insertByName( "MonChampNumérique",oNumModel )
oNumControl = oDlg.getControl("MonChampNumérique")
oNumControl.setPosSize(60, 20, 78, 25, com.sun.star.awt.PosSize.POSSIZE) 'position et dimension
if oDlg.Execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
MsgBox("la Valeur ecrite dans mon Champs Numerique est : " & oNumControl.Value)
End if
End Sub
Ajout : Merci d'être plus précis, explique ce qui ne fonctionne pas |
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
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
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonsoir,
Merci de ton aide,
A l’exécution j'obtiens ce message d'erreur:
Merci de ton aide,
oui, désolé je joins un nouveau fichierLe fichier joint ne comporte aucune macro...
Dans la boite de dialogue j'ai mis un bouton qui appelle la macro qui est sensée créer un deuxième bouton dans la boite de dialogue.Merci d'être plus précis, explique ce qui ne fonctionne pas
A l’exécution j'obtiens ce message d'erreur:
Erreur d'exécution BASIC.
Propriété ou méthode non trouvée : createInstance.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Re
Ton fichier avec la macro corrigé. Je te laisse trouver les différences avec l'original. Le listener n'est pas utile c'est la boite de dialogue déjà existante (Dialog1) qui gère les événements. Si je peux donner mon avis, ce n'est pas une très bonne idée de créer un bouton de façon dynamique. La première raison, c'est lourd à mettre en place, la deuxième c'est qu'un second appui sur le bouton va créer une erreur.
Cordialement
Luke
Ton fichier avec la macro corrigé. Je te laisse trouver les différences avec l'original. Le listener n'est pas utile c'est la boite de dialogue déjà existante (Dialog1) qui gère les événements. Si je peux donner mon avis, ce n'est pas une très bonne idée de créer un bouton de façon dynamique. La première raison, c'est lourd à mettre en place, la deuxième c'est qu'un second appui sur le bouton va créer une erreur.
Cordialement
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
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
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Re,
Merci luky-luke, ça marche très bien.
J'ai trouvé la différence (oDlg.Model).
Je compte mettre un bouton de création de champ ---> Fait.
Et aussi comment assigner une macro à un bouton créé par macro ? De façon à créer un nouveau nouveau champ.
Merci luky-luke, ça marche très bien.
J'ai trouvé la différence (oDlg.Model).
Certes mais c'est parce-que je ne sais pas d'avance combien de champs vont être utiles .Si je peux donner mon avis, ce n'est pas une très bonne idée de créer un bouton de façon dynamique. La première raison, c'est lourd à mettre en place, la deuxième c'est qu'un second appui sur le bouton va créer une erreur.
Je compte mettre un bouton de création de champ ---> Fait.
j'y travaille. A ce sujet sais-tu comment rendre invisible un bouton créé par macro ? ---> Fait...c'est qu'un second appui sur le bouton va créer une erreur.
Et aussi comment assigner une macro à un bouton créé par macro ? De façon à créer un nouveau nouveau champ.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Drake le 11 nov. 2019 13:41, modifié 1 fois.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour,
Un autre moyen de faire serait de rendre visibles ou invisibles certains contrôles en fonction du contexte. Tous les contrôles possèdent une propriété Step (pas) (page) dont il suffit de modifier la valeur pour qu'ils s'affichent ou non. Voir ici un début d'explication ici : https://forum.openoffice.org/fr/forum/v ... 39#p330333. A mon avis ce sera plus simple à mettre en place et un peu moins usine à gaz.
A+
Un autre moyen de faire serait de rendre visibles ou invisibles certains contrôles en fonction du contexte. Tous les contrôles possèdent une propriété Step (pas) (page) dont il suffit de modifier la valeur pour qu'ils s'affichent ou non. Voir ici un début d'explication ici : https://forum.openoffice.org/fr/forum/v ... 39#p330333. A mon avis ce sera plus simple à mettre en place et un peu moins usine à gaz.
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour,
Merci OOotremer971 pour le lien.
J'ai regardé la vidéo de l'exemple et je trouve cela intéressant.
Néanmoins la mise en œuvre me parait complexe pour mon niveau et je ne suis pas sur que cela convienne à mon besoin.
Par ailleurs je ne vois pas la différence avec la propriété "setVisible" d'un contrôle.
Aussi je vais rester sur ma première idée d'ajout dynamique de contrôle(s) par macro dans une boite de dialogue existante.
Il me reste à trouver comment assigner une macro à un évènement d'un contrôle qui a été créé par macro.
Comme je ne suis pas sur d'être clair, voici en image l'équivalent de ce que je souhaite créer par macro (si c'est possible évidemment). Merci de votre aide.
Edit: Je viens de voire dans le livre "Programmation OpenOffice.org" de Bernard Macelly et Laurent Godard page 662 un code qui semble correspondre à ce que je cherche faire.
J'ai des difficultés à l’insérer dans mon code existant mais je vais persévérer néanmoins quitte à revenir vers vous si je bloque.
a+
Merci OOotremer971 pour le lien.
J'ai regardé la vidéo de l'exemple et je trouve cela intéressant.
Néanmoins la mise en œuvre me parait complexe pour mon niveau et je ne suis pas sur que cela convienne à mon besoin.
Par ailleurs je ne vois pas la différence avec la propriété "setVisible" d'un contrôle.
Aussi je vais rester sur ma première idée d'ajout dynamique de contrôle(s) par macro dans une boite de dialogue existante.
Il me reste à trouver comment assigner une macro à un évènement d'un contrôle qui a été créé par macro.
Comme je ne suis pas sur d'être clair, voici en image l'équivalent de ce que je souhaite créer par macro (si c'est possible évidemment). Merci de votre aide.
Edit: Je viens de voire dans le livre "Programmation OpenOffice.org" de Bernard Macelly et Laurent Godard page 662 un code qui semble correspondre à ce que je cherche faire.
J'ai des difficultés à l’insérer dans mon code existant mais je vais persévérer néanmoins quitte à revenir vers vous si je bloque.
a+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour
En relisant le fil, je m'aperçoit que je t'ai induis en erreur.
Pour l'ajout d'un bouton (tu devrais changer le titre du fil "Ajouter Contrôle dans boite de dialogue") le listener est nécessaire.
Un exemple qui résume l'ensemble de tes questions (Trop de questions dans un même fil, la patrouille va nous rattraper )
Ajout d'un champs numérique - Ajout d'un bouton - affectation d'une action - Bouton visible pas visible.
Quant à assigner un événement souris sur une boite dialogue, j'ai jamais fais, c'est déjà une machine à gaz sur une simple feuille, alors sur une boite de dialogue
Bon courage
Luke
En relisant le fil, je m'aperçoit que je t'ai induis en erreur.
Pour récupérer la valeur d'un champ numérique ajouter dynamiquement ( c'est la question de départ) Il n'est pas nécessaire d'avoir une écoute (listener) sur la champ.luky-luke a écrit :Le listener n'est pas utile c'est la boite de dialogue déjà existante (Dialog1) qui gère les événements.
Pour l'ajout d'un bouton (tu devrais changer le titre du fil "Ajouter Contrôle dans boite de dialogue") le listener est nécessaire.
Un exemple qui résume l'ensemble de tes questions (Trop de questions dans un même fil, la patrouille va nous rattraper )
Ajout d'un champs numérique - Ajout d'un bouton - affectation d'une action - Bouton visible pas visible.
Code : Tout sélectionner
Public oDlg As Object
Public oNumControl As Object, oButtonControl As Object
Sub AfficheDialogue
DialogLibraries.LoadLibrary("Standard")
oDlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
oDlg.Execute
End Sub
Sub Insert_Controle
Dim oNumModel As Object, oButtonModel As Object
oNumModel = oDlg.Model.createInstance( "com.sun.star.awt.UnoControlNumericFieldModel" )
oButtonModel = oDlg.Model.createInstance( "com.sun.star.awt.UnoControlButtonModel" )
oDlg.Model.insertByName( "MonChampNumérique",oNumModel )
oDlg.Model.insertByName( "LeBouton",oButtonModel )
oNumControl = oDlg.getControl("MonChampNumérique")
oButtonControl = oDLg.GetControl("LeBouton")
oButtonControl.Model.Name = "Le_Bouton"
oButtonControl.Visible = False
oNumControl.setPosSize(40, 20, 75, 25, com.sun.star.awt.PosSize.POSSIZE)
oButtonControl.setPosSize(180,20,75,25,com.sun.star.awt.PosSize.POSSIZE)
PushButton = CreateUnoListener("LeBouton_", "com.sun.star.awt.XActionListener")
oButtonControl.AddActionListener (PushButton)
End Sub
Sub Bouton_Visible(oEvt)
ListeControle() = oDlg.Controls
For i = 0 to Ubound(ListeControle())
Nom = ListeControle(i).Model.Name
If ListeControle(i).Model.Name = "Le_Bouton" then
If oButtonControl.isVisible = False Then
oButtonControl.Visible = True
Else
oButtonControl.Visible = False
End if
End if
Next i
End Sub
Sub LeBouton_ActionPerformed(oEvt As Object)
Print "Coucou c'est MOA !"
End sub
Sub LeBouton_disposing(oEvt As Object)
End sub
Quant à assigner un événement souris sur une boite dialogue, j'ai jamais fais, c'est déjà une machine à gaz sur une simple feuille, alors sur une boite de dialogue
Bon courage
Luke
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
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
-
- InconditiOOnnel
- Messages : 839
- Inscription : 10 janv. 2009 08:05
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonsoir,
https://forum.openoffice.org/fr/forum/v ... nt#p315793
A plus.
un exemple ici:Drake a écrit :Il me reste à trouver comment assigner une macro à un évènement d'un contrôle qui a été créé par macro.
https://forum.openoffice.org/fr/forum/v ... nt#p315793
A plus.
A jour de LibreOffice et de Ubuntu
-
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 00:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc]Creer dynamiquement champ dans boite de dialogue
Bonjour
parEt ajouter les quatre macro suivanteLes quatre macro sont obligatoire sous peine d'avoir un message d'erreur.
La macro disposing quant à elle ne change pas et est également obligatoire
Luke
Pour assigner à un bouton une macro à un événement souris, il faut remplacer dans la macro que je donne plus haut et dans le fichier associé CreaBouton4Drake a écrit :Il me reste à trouver comment assigner une macro à un évènement d'un contrôle qui a été créé par macro.
Code : Tout sélectionner
PushButton = CreateUnoListener("LeBouton_", "com.sun.star.awt.XActionListener")
oButtonControl.addActionListener(PushButton)
Code : Tout sélectionner
PushButton = CreateUnoListener("LeBouton_", "com.sun.star.awt.XMouseListener")
oButtonControl.addMouseListener(PushButton)
Code : Tout sélectionner
sub LeBouton_mousePressed(oEvt As Object)
End Sub
Sub LeBouton_MouseReleased(oEvt As Object)
Print "Coucou c'est MOA !"
End sub
Sub LeBouton_mouseEntered(oEvt As Object)
End Sub
Sub LeBouton_mouseExited(oEvt As Object)
End Sub
La macro disposing quant à elle ne change pas et est également obligatoire
Code : Tout sélectionner
Sub LeBouton_disposing(oEvt As Object)
End sub
Ben voila ! c'est faitluky-luke a écrit :Quant à assigner un événement souris sur une boite dialogue, j'ai jamais fais
Cordialementluky-luke a écrit :tu devrais changer le titre du fil "Ajouter Contrôle dans boite de dialogue"
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
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
-
- Membre cOOnfirmé
- Messages : 299
- Inscription : 02 févr. 2012 00:51
[RESOLU][Calc]Ajouter Contrôle dans boite de dialogue
Bonsoir,
N'ayant pas trouvé par moi-même comment assigner une macro à un évènement, j'ai modifié ma boite de dialogue en ajoutant un bouton qui fera aussi bien l'affaire.
Je garde néanmoins vos solutions sous le coude (merci à vous luky-luke et joel).
@luky-luke
Cordialement,
Drake
N'ayant pas trouvé par moi-même comment assigner une macro à un évènement, j'ai modifié ma boite de dialogue en ajoutant un bouton qui fera aussi bien l'affaire.
Je garde néanmoins vos solutions sous le coude (merci à vous luky-luke et joel).
@luky-luke
Pas nécessairement, pour mon code je n'ai pas eu besoin de l'utiliser.Pour l'ajout d'un bouton le listener est nécessaire.
Cordialement,
Drake
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)