[Base] Simuler un formulaire à onglets

Venez découvrir tous les tutoriels, modèles et autres foires aux questions afin de maîtriser rapidement votre suite bureautique favorite.

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Cette section est faite pour présenter les tutoriels. Si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du module où se produit le problème.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

[Base] Simuler un formulaire à onglets

Message par Pierre-Yves Samyn »

Bonjour

Ce tutoriel fait suite à ce fil viewtopic.php?f=9&t=23687

L'objectif est de contourner l'absence de contrôle "à onglets" dans les formulaires, en particulier pour OOoBase (mais la technique présentée ici n'est pas limitée à ce module).

Un formulaire est un document (cf. writer). Un document peut comprendre des sections et les sections peuvent être masquées ou non.

La solution à notre problème consiste à ancrer les contrôles dans différentes sections. Les sections peuvent être affichées / masquées... ainsi que leur contenu... Nous aurons donc une section par "onglet".

Les onglets permettant de changer de page seront de simples boutons qui, bien entendu, ne seront pas dans une section susceptible d'être masquée.

Exemple :
Sections.png
Dans cet exemple nous gèrons deux onglets : l'un affichant le formulaire Client et l'autre les factures.
Les boutons sont ancrés aux premiers paragraphes.
En dessous sont dessinés les contrôles "Factures" (un contrôle Table et une zone de texte), ainsi qu'un rectangle gris qui nous servira de "fond".
En dessous sont dessinés les contrôles "Client" (zones de texte ainsi qu'un rectangle de fond).

Nous avons deux sections dans le document. Pour cela, insérer autant de paragraphes que nécessaire dans le document, ancrer les contrôles aux paragraphes ad hoc (et les repositionner car le changement d'ancrage les fera sans doute bouger).

Dans la copie d'écran le rectange "de fond" des factures est sélectionné. On voit qu'il est ancré à un paragraphe adjacent.

Pour insérer les sections, sélectionner les paragraphes concernés puis Insertion > Section.
Par défaut OOo nomme les sections Section1, Section2, etc. Par commodité, et pour alléger le code les sections insérées dans le formulaire seront nommées de la même manière que les boutons provoquant leur affichage. Ici : Factures et Client.

Une seule procédure est nécessaire qui sera associée aux 2 boutons

Code : Tout sélectionner

sub PysAfficher(PysEvent)
dim i as integer

for i = 0 to thiscomponent.TextSections.count - 1
	if thiscomponent.TextSections(i).name = PysEvent.Source.Model.Name then
		thiscomponent.TextSections(i).IsVisible = true
	else	
		thiscomponent.TextSections(i).IsVisible = false
		PysEvent.Source.Model.parent.getByName(thiscomponent.TextSections(i).name).state = 0
	end if
next i

end sub
La procédure "boucle" sur toutes les sections du document (le même code peut donc servir quel que soit le nombre d'onglets).
Pour chaque section, on vérifie que le nom de la section correspond à celui du bouton ayant lancé la procédure. Si oui, on rend visible la section, sinon, on masque la section.

Pour agrémenter la présentation, nous définissons les boutons de type Basculer : Oui
Bouton.png
Bouton.png (3.68 Kio) Consulté 10965 fois
Ainsi, lorsqu'une section (onglet) est affichée, le bouton est enfoncé.
Le programme "relève" les boutons correspondant aux sections masquées.
Pièces jointes
masquerSection.odb
(45.19 Kio) Téléchargé 1518 fois
Répondre