|
HOWTO Accueil
HOWTO développement Sashipa
Repositionner des champs.
Le positionnement par défaut des champs ne vous convient pas.
Utiliser un deuxième fieldContainer, inclus dans le fieldContainer principal
Vous avez plusieurs champs (par exemple des checkBoxField) qui vous prennent beaucoups
de place et vous souhaitez les regrouper sur plusieurs colonnes.
<cardForm db='dbBase'>
<title>Fiche Personne</title>
<location x='10' y='10' />
<cardSchemaTableRef schemaTable='tblPersonne' updateAfterInsert='yes'
multipleInsert='yes' queries='sudi' />
<fieldContainer>
<!-- ... autres champs ... -->
<fieldContainer displaySubLabels='no'>
<label>Langages maîtrisés</label>
<size w='300' h='52' />
<layout type='grid' gridRows='3' gridColumns='2' />
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolanglaislu' />
</checkBoxField>
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolanglaisecrit' />
</checkBoxField>
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolallemandlu' />
</checkBoxField>
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolallemandecrit' />
</checkBoxField>
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolespagnollu' />
</checkBoxField>
<checkBoxField>
<schemaColumnRef schemaColumn='tblPersonne_Boolespagnolecrit' />
</checkBoxField>
</fieldContainer>
<!-- ... autres champs ... -->
</fieldContainer>
</cardForm>
|
Remarques concernant le fieldContainer inclus :
-
L'attribut displaySubLabels='no' signifie que les libellés des champs
contenus par le fieldContainer ne seront pas affichés. En effet, ce label est
affiché par la case à cocher de toutes façons.
-
On spécifie un label pour le fieldContainer : il sera commun aux six cases à
cocher.
-
On spécifie une taille pour le fieldContainer avec l'élément size.
Autrement le layout risque de ne pas opérer correctement.
-
On spécifie un layout (ie. un gestionnaire de positionnement).
Un layout est un gestionnaire de positionnement. Les types autorisés
sont : table, flow, grid, none :
table est le layout par défaut. Il affiche les champs sur deux colonnes de
gauche à droite puis de haut en bas. Il respecte la hauteur et la largeur de chaque
champs, il agrandit éventuellement les plus petits à la manière d'un tableau HTML.
flow positionne les champs les uns à la suite des autres. Quand la largeur
maximale du container est atteinte, il revient à la ligne.
grid crée une grille de gridColumns colonnes et gridRows
lignes (valeurs spécifiées par attributs). Il remplit ensuite avec les champs de
gauche à droite puis de haut en bas. Il ignore la hauteur et la largeur de chaque
champs, il redimensionne pour tous les champs à la taille des cellules.
none supprime le gestionnaire de positionnement. Lorsqu'on l'utilise, il
faut spécifier - pour chacun des champs contenus - un élément manualFieldLocation
Exemple avec un positionnement manuel (sans layout)
Cette fois-ci, nous voulons positionner les champs des nom et prénom à
gauche de l'écran, et les champs de cases à cocher à droite.
Nous allons donc définir deux sous-fieldContainers : un pour les nom et
prénom, et un autre pour les cases à cocher. Nous annulons le layout du
sous-fieldContainer principal (layout type='none') et nous positionons manuellement les deux
sous-fieldContainers. De plus, nous en profitons - pour l'exemple - pour
utiliser un layout de type 'flow' avec les cases à cocher.
<cardForm db='dbBase'>
<title>Fiche Personne</title>
<location x='10' y='10' />
<cardSchemaTableRef schemaTable='tblPersonne' updateAfterInsert='yes'
multipleInsert='yes' queries='sudi' />
<fieldContainer displaySubLabels='no'>
<layout type='none' />
<fieldContainer>
<manualFieldLocation xField='0' yField='0' />
<textField>
<schemaColumnRef schemaColumn='tblPersonne_Nom' />
</textField>
<textField>
<schemaColumnRef schemaColumn='tblPersonne_Prenom' />
</textField>
</fieldContainer>
<fieldContainer>
<manualFieldLocation xField='0' yField='300' />
<fieldContainer displaySubLabels='no'>
<label>Anglais</label>
<size w='240' h='32' />
<layout type='flow' />
<checkBoxField>
<label>lu</label>
<schemaColumnRef schemaColumn='tblPersonne_Boolanglaislu' />
<size w='50' h='20' />
</checkBoxField>
<checkBoxField>
<label>écrit</label>
<schemaColumnRef schemaColumn='tblPersonne_Boolanglaisecrit' />
<size w='70' h='20' />
</checkBoxField>
<checkBoxField>
<label>parlé</label>
<schemaColumnRef schemaColumn='tblPersonne_Boolanglaisparle' />
<size w='70' h='20' />
</checkBoxField>
</fieldContainer>
</fieldContainer>
</fieldContainer>
</cardForm>
|
Remarques :
Dans le fieldContainer des cases à cocher est de type 'flow', c'est pourquoi
nous redéfinissons une taille pour chacune des cases à cocher. Autrement ces
champs prendraient leur taille par défaut, beaucoup trop grande.
Définir les tailles par défaut
Lorsque vous ne spécifiez pas la taille d'un champ, celui-ci prend sa taille par
défaut. Les tailles par défaut sont définies dans l'élément defaultParameterSet :
<defaultParameterSet>
<defaultParameter applyOn='field' type='size'>
<size w='200' h='20' />
</defaultParameter>
<defaultParameter applyOn='writeChoiceFkField' type='size'>
<size w='200' h='100' />
</defaultParameter>
<defaultParameter applyOn='textAreaField' type='size'>
<size w='200' h='100' />
</defaultParameter>
</defaultParameterSet>
|
L'ordre de définition n'est pas important. La taille définie pour applyOn='field'
est la taille par défaut pour tous les champs, sauf si l'on spécifie une taille par
défaut pour un champ en particulier. Donc ici, tous les champs aurons la taille (200; 20)
sauf les writeChoiceFkField et les textAreaField qui feront (200; 100).
Répartir les champs (et listForm) sur plusieurs écrans
Vous avez trop de champs dans votre fiche, ou trop de listForm. Ca ne rentre
pas et vous souhaitez retirer une partie de ces composants, pour les rendre
accessible dans un écran à part au moyen d'un bouton.
Cela se fait simplement en ajoutant un menuForm dans le premier écran :
<screen name='SCtblPersonne'>
<title>Fiche Personne</title>
<formSet>
<cardForm db='dbBaseDemo'>
<title>Fiche Personne</title>
<location x='10' y='10' />
<cardSchemaTableRef schemaTable='tblPersonne' queries='sudi'
updateAfterInsert='yes' multipleInsert='no' />
<fieldContainer>
<textField>
<schemaColumnRef schemaColumn='tblPersonne_Nom' />
</textField>
...
</fieldContainer>
</cardForm>
<menuForm>
<firstButtonLocation x='630' y='432' />
<buttonSize w='100' h='30' />
<menuButtonList>
<menuButton screen='SCtblPersonne_Details'>Détails</menuButton>
</menuButtonList>
</menuForm>
</formSet>
</screen>
<screen name='SCtblPersonne_Details'>
<title>Fiche Personne : Détails</title>
<formSet>
<cardForm db='dbBaseDemo'>
<title>Fiche Personne : Détails</title>
<location x='10' y='10' />
<cardSchemaTableRef schemaTable='tblPersonne' queries='sudi'
updateAfterInsert='yes' multipleInsert='no' />
<fieldContainer>
<textField readOnly='yes'>
<schemaColumnRef schemaColumn='tblPersonne_Nom' />
</textField>
<!-- ... champs de la fiche détails ... -->
</fieldContainer>
</cardForm>
</formSet>
</screen>
|
Important ! Le principe selon lequel les informations d'un cardForm sont
enregistrés à chaque changement d'écran reste valable. Aussi il est
essentiel que le premier écran contienne tous les champs obligatoires.
Autrement l'ajout serait impossible.
Si vous n'avez qu'un bouton dans votre menuForm, l'espacement vertical des
boutons (verticalGap) n'est pas significatif et on peut ne pas le
préciser. De plus, on ne met pas de titre à ce menu.
On remarque que l'on rappelle à l'utilisateur l'enregistrement dont il regarde
la fiche détail. Mais ici il peut paraître logique de mettre ces champs de
rappel en lecture-seule (readOnly='yes').
Top
© Copyright 2003 Sashipa-Melba Team.
Ce document de la technologie Sashipa-Melba est
sous licence GNU FDL Vous
pouvez le copier et modifier librement les copies tant que cette mention apparaît clairement.
|