Bonjour
Ce tutoriel fait suite au message de
Dude [Base] Rendre autonome son application
et à la question du fil
Verrouiller l'accès aux tables, formulaires ...
Il ne traite que du masquage de l’interface principale de Base.
La solution la plus employée consiste à masquer la fenêtre au démarrage de l’application avec la commande
Code : Tout sélectionner
ThisDatabaseDocument.CurrentController.ApplicationMainWindow.setVisible(false)
La fenêtre étant masquée, il faut naturellement afficher un formulaire, type menu, permettant d’utiliser l’application.
C’est-ce que fait la macro Démarrage.
Elle est déclenchée par l’événement «
Ouvrir le document » dans le menu
Outils >
Personnaliser de la fenêtre principale.
Code : Tout sélectionner
Sub Demarrage()
Dim oConnexion AS Object, oFrame as Object
ThisDatabaseDocument.CurrentController.connect("","")
oConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
ThisDatabaseDocument.FormDocuments.getByName( "fMenu" ).open
oFrame = thisDatabaseDocument.FormDocuments.getByName("fMenu").Component.CurrentController.Frame
oFrame.Title = "Menu"
ThisDatabaseDocument.CurrentController.ApplicationMainWindow.setVisible(False)
End Sub
Ce formulaire doit aussi gérer la fermeture de la base.
La solution est simple à partir d’un bouton du formulaire.
La macro
Quitter ferme le formulaire puis la base de données.
Elle est déclenchée par l’événement
Exécuter l’action du bouton
Quitter la base.
Code : Tout sélectionner
Sub Quitter
ThisDatabaseDocument.FormDocuments.getByName("fMenu").Close
ThisDatabaseDocument.close(True)
End Sub
Cependant si l’utilisateur ferme le formulaire en utilisant la croix de la fenêtre, le formulaire est fermé mais pas la base.
Dans ce fil,
Re: [Base] Fermeture de base avec interface cachée spYre donne une solution qui fonctionne en l’adaptant un peu à l’évolution du logiciel.
C’est le rôle de la macro
FermetureMenu.
Elle est déclenchée par l'événement
Sous-composant fermé dans le menu
Outils >
Personnaliser de la fenêtre principale.
Code : Tout sélectionner
Sub FermetureMenu(oEv as Object)
Dim database as Object,menu as Object
database = oEv.source
menu = database.getFormDocuments.getByName("fMenu")
If isNull(menu.getComponent() ) Then
ThisDatabaseDocument.close(True)
End If
End Sub
Cette solution présente un inconvénient, si plusieurs documents Office sont ouverts, la fermeture du dernier document fermera l’application.Voir
Masquer fenêtre pour un éventuel contournement
La seule solution trouvée pour que l’application ne soit pas fermée est d’afficher sa fenêtre par une macro dans le container mes macros et assignée à l’événement Le document va être fermé d’Office.
Code : Tout sélectionner
Sub AfficherMasquee
Dim maFenetre as Object
If StarDesktop.Frames.getCount() = 2 Then
For i = 0 to StarDesktop.Frames.getCount() - 1
maFenetre = StarDesktop.Frames.getByIndex(i)
If maFenetre.IsHidden = True Then
maFenetre.getController().ApplicationMainWindow.Visible = True
End If
Next i
End If
End Sub
C’est évidemment loin d’être satisfaisant.
MasquerFenêtre.odb
Une autre solution consiste à ne masquer que les éléments de la fenêtre.
Cette solution est inspirée des suprêmes de
Pierre-Yves Samyn [Base] Sélectionner les objets (tables, requêtes, etc.) et de
Loopingss [Basic] Gestion des barres d'outils personnelles (BOP)
La macro
MasquerObjets masque les éléments de la fenêtre principale et permet de masquer les barres d’outils intégrées tout en affichant les barres d’outils personnelles.
Elle ne traite pas les barres d'outils ajoutées par une extension. La seule barre d'outils d'extension que j'ai étant celle de la sauvegarde incrémentée d'
Alain de la Chaume ça me convient parfaitement
Elle permet aussi de masquer ou pas la barre de menu selon que vous ayez ou pas prévu des menus personnalisés.
Elle est assignée à l’événement «
Ouvrir le document » dans le menu
Outils >
Personnaliser
Code : Tout sélectionner
Sub MasquerObjets
Dim oFrame as Object,oElements as Object,oElement as Object,maConnexion as Object
oFrame = thisDatabaseDocument.currentController.Frame
oElements = oFrame.LayoutManager.Elements
For Each oElement In oElements()
If InStr(oElement.ResourceURL,"Custom") Then
oFrame.LayoutManager.ShowElement(oElement.ResourceURL)
ElseIf oElement.ResourceURL = "private:resource/menubar/menubar" Then
oFrame.LayoutManager.ShowElement(oElement.ResourceURL)
Else
oFrame.LayoutManager.HideElement(oElement.ResourceURL)
End If
Next oElement
oFrame.ComponentWindow.Visible = False
oFrame.getContainerWindow().IsMaximized = True
oFrame.Title = "Mon Application"
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
ThisDatabaseDocument.FormDocuments.getByName( "fMenu" ).open
End Sub
Pour la gestion des barres de menus par macros voir le suprême d'
Alain de la Chaume [Basic] Barre de menus : ajout, suppression
Cette solution permet de ne pas avoir à s’occuper de la gestion de la fenêtre.
les autres macros sont pratiquement les mêmes que dans l'autre base.
La macro
toggleToolbars qui masque les barres d’outils et le menu des formulaires est de
spYre dans ce fil
Re: [Basic] Masquer barres d'outils
Il est possible de l’utiliser dans
MasquerObjets, elle peut traiter les barres d’outils des extensions.
Elle est assignée à l’événement
Lors du chargement des propriétés du formulaire quand celui-ci est lié à une table, et à l’événement
Ouvrir le document dans menu
Outils >
Personnaliser du formulaire quand il n’est pas lié.
Code : Tout sélectionner
Sub toggleToolbars(nomForm as String)
Dim component
Dim LM as Object, toolbars(), toolbar$, u%
component = ThisDatabaseDocument.FormDocuments.getByname(nomForm).Component
toolbars = createUnoService("com.sun.star.ui.WindowStateConfiguration").getByName(component.identifier).getElementNames()
u = uBound(toolbars)+1
Redim Preserve toolbars(u)
toolbars(u) = "private:resource/menubar/menubar"
LM = component.currentController.frame.layoutManager
For Each toolbar In toolbars
LM.hideElement(toolbar)
Next
End Sub
MasquerObjets.odb
Testé sous AOO 4.1.1 et LibO 4.3
Toutes remarques et/ou corrections seront les bienvenues.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.