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 :
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
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
Ainsi, lorsqu'une section (onglet) est affichée, le bouton est enfoncé.
Le programme "relève" les boutons correspondant aux sections masquées.