[Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

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 !
Joseph46
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 16 mars 2016 23:11

[Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par Joseph46 »

Bonjour à tous

J'expérimente le masquage des barres d'outils à l'ouverture de formulaires. Le sujet est déjà largement traité sur le forum.
viewtopic.php?t=27370
viewtopic.php?t=12607

L'exemple de la macro suivante (simple et radicale) illustre l'objectif

Code : Tout sélectionner

Sub Masque BarreOutils()
    doc = Stardesktop.getCurrentComponent()
    frame = doc.CurrentController.Frame
    lmgr = frame.LayoutManager
    lmgr.setVisible(False)
End Sub
Son inverse (.setVisible(True)) rétablit parfaitement les barres d'outils dans l'environnement de la base de données.

Les deux macros attribuées aux événements respectifs "ouvrir" et "fermer" le document (Outils > Personnaliser...) font tout à fait leur travail.

Cependant, l'ouverture du formulaire en mode "ébauche"/"édition" déclenche également la macro qui fait donc parfaitement ce pour quoi elle est faite et supprime les barres d'outils qui pourtant, dans ce contexte, sont tout à fait utiles. :roll:

Je voudrais améliorer la macro afin de contrôler le déclenchement de la méthode .setVisible() en fonction de l'état du formulaire: mode "ébauche"/"édition" ou mode "saisie de données".

Je cherche donc a récupérer une info sur l'état ("ébauche" ou "saisie") du formulaire ouvert. Mais je ne parviens pas à trouver de solution.

La piste que j'ai suivi pour l'instant tourne autour de ce genre de macro :

Code : Tout sélectionner

Sub ActivModeEbauche 'remplacer le chemin "C:\...file.ods" par un chemin et un fichier valide
Dim Dispatcher As Object : Let Dispatcher = CreateUNOService ("com.sun.star.frame.DispatchHelper")
Dispatcher.ExecuteDispatch (StarDesktop.loadComponentFromURL (convertToURL ("C:\...file.ods"), "_DefaultFrame", 0,_ array()).CurrentController.Frame,".uno:SwitchControlDesignMode", 0, Array())
End Sub
Mais à la place de l'action "SwitchControlDesignMode" je recherche plutôt une méthode attachée à un objet Frame qui me retournerait une réponse booléenne; quelque chose comme "isFormDesignMode" ...

Et là je me noie dans les méandres de l'API.

L'objet Frame n'est peut être pas le bon objet pour interroger l'état du formulaire ?
Et si oui, existe-t'il une méthode permettant de récupérer cette info ?

Quelqu'un aurait il une bouée ?

Merci d'avance pour vos conseils.
Dernière modification par micmac le 30 déc. 2023 11:49, modifié 2 fois.
Raison : [Résolu] remplace [Resolu]
LibreOffice 6.4.7.2
Ubuntu 20.04.6 LTS
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12659
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par Bidouille »

Bonjour,
Dans votre signature, il y a écrit :LibreOffice 6.4.7.2
Ubuntu 20.04.6 LTS
Cette version est déclarée depuis longtemps comme obsolète et n'est plus maintenue.
Commencez par vous mettre à jour : viewtopic.php?f=2&t=49867
Puis corrigez l'information dans votre signature.

Si le problème persiste, joignez, non pas une capture d'écran, mais un document exhaustif permettant de reproduire ce que vous décrivez :
Comment joindre un fichier au format ODB
Pensez également à dépersonnaliser son contenu.


***
Joseph46
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 16 mars 2016 23:11

Re: [Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par Joseph46 »

Bonjour à toutes et à tous

Réponse trouvée par hasard sur le forum Libreoffice
https://ask.libreoffice.org/t/affichage ... aire/79183

La question isFormDesignMode existe bien. Elle se situe au niveau du "Controller" dont dépend le cadre ("Frame") sur lequel est appliqué (ou non) la "mise en page" ("Layout") pilotant notamment les barres d'outils à afficher ou a masquer.

Donc pour répondre au problème que je rencontrait, il suffit donc de poser la question suivante :
Est ce que le Controller du formulaire cible est en mode Ebauche/Conception ?
Si oui -> on sort de la procédure et les barres d'outils sont affichées normalement
Si non -> la procédure poursuit son cours, elle redimensionne la fenêtre du formulaire, affiche un titre dans le cadre de la fenêtre et empêche l'affichage des barres d'outils.

Ci-dessous le code des procédure que j'utilise.
Les deux macros MasqueBarreOutils et AfficheBarreOutils sont attribuées respectivement aux événements "ouvrir" et "fermer" d'un formulaire de ma base de donnée. A l'ouverture en mode saisie les barres d'outils sont masquées. A l'ouverture en mode conception toute la boite à outils est disponible :wink:
Si ça peut servir à quelqu'un ...

On pourra être plus fin, plus précis, dans la gestion des barres d'outils en explorant les macros expliquées en suivant les liens donnés en début de fil :)
Merci à vous pour la richesse des informations sur ce forum.

Bonne fin d'année à toutes et à tous

Code : Tout sélectionner

option explicit
DIM doc AS object
DIM cctrl AS object
DIM frame AS object
DIM wind AS object
DIM lmgr AS object

Sub MasqueBarreOutils()
	doc = Stardesktop.getCurrentComponent()
	cctrl = doc.CurrentController
	frame = cctrl.Frame
	wind = frame.getContainerWindow()
	lmgr = frame.LayoutManager
    
	' Si en mode Conception -> Sortir de la procédure
	If cctrl.isFormDesignMode Then
		Exit Sub
	End If

	wind.setPosSize(500,200,1100,700,15)
	frame.setTitle "TITRE FORMULAIRE"
	lmgr.setVisible(False)
End Sub

Sub AfficheBarreOutils()
    doc = Stardesktop.getCurrentComponent()
    frame = doc.CurrentController.Frame
    lmgr = frame.LayoutManager
    lmgr.setVisible(False)
End Sub
LibreOffice 6.4.7.2
Ubuntu 20.04.6 LTS
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 713
Inscription : 20 déc. 2017 14:45

Re: [Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par rollmops »

Bonjour,

Pourriez-vous fournir un ODB pour illustrer votre solution ?
Car je ne comprends pas comment vous pouvez exécuter une macro sur un formulaire en édition.

Merci
OpenOffice 4.1.15 - Windows 10
Joseph46
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 16 mars 2016 23:11

Re: [Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par Joseph46 »

Bonjour Rollmops

L'usage des macros de personnalisation (Outils > Personnaliser...) se déclenchent à l'ouverture d'un document (le formulaire en l’occurrence); qu'il soit ouvert en mode "Saisie" ou en mode "Ébauche".
Il s'agissait pour moi de trouver le moyen d'introduire la détection du mode "saisie" ou "ébauche" dans la macro de masquage des barres d'outils afin d'afficher ou de masquer les barres d'outils en fonction du mode d'ouverture du formulaire.

Bonne journée.

PS: Merci Bidouille pour la correction du balisage :oops:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.4.7.2
Ubuntu 20.04.6 LTS
Avatar de l’utilisateur
rollmops
PassiOOnné
PassiOOnné
Messages : 713
Inscription : 20 déc. 2017 14:45

Re: [Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par rollmops »

Re,

Je ne comprends toujours pas.
J'ai ouvert votre ODB puis fais un clic droit "Modifier" sur le formulaire "test_Form"
Et le formulaire apparaît en édition avec des barres d'outils.
A aucun moment, une macro s'exécute.
OpenOffice 4.1.15 - Windows 10
Joseph46
NOOuvel adepte
NOOuvel adepte
Messages : 14
Inscription : 16 mars 2016 23:11

Re: [Résolu][Base] Détecter l'état "édition" ou "saisie de données" d'un formulaire

Message par Joseph46 »

Bonjour Rollmops.

Voici pour ma part les captures d'écrans de l'ouverture du formulaire :

Ouverture en mode édition
Ouverture Edition.png
Ouverture en mode saisie
Ouverture Saisie.png
D'où vient la différence entre nos constatations ?
Une différence OpenOffice / LibreOffice ? Un paramétrage d'activation des macros que je ne connais pas ?
Mon trop faible niveau d'expertise ne me permet pas de répondre à la question.

Je constate juste que les macros du menu "personnaliser" associées à mon formulaire se déclenchent en mode saisie comme en mode édition.
Ce qui me posait le problème à l'origine de ce fil. J'ai trouvé un contournement et je poste ma solution pour contribuer dans la mesure de mes moyens.

Bonne journée à tous
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.4.7.2
Ubuntu 20.04.6 LTS