Salut
(Chantal) la désous un bout de code si ca peut t'aider :o) Mets le ds un wokspace, selectionne en entier (C-A) et évalues.
Le TableLayout ne peut pas garantir la même taille pour toutes les lignes, le layout proportionnel est mieux pour cela.
Est cequ'y a qqu'un qui a écrit-refléchit-..??##**..- sur un layout plus sioux, style gridbalyout de java (mais en + simple :-)) qui éviterait d'imbriquer douze millions de layouts et morphs pour faire un écran de saisie à 10 champs?
cordialement, Alain
| t | " le morph principal rectangulaire, arrangé avec un tablelayout de haut vers le bas. le resizing est #spaceFill pour occuper tt l'espace du morph" t _ RectangleMorph new beTransparent ; borderWidth: 0; layoutPolicy: TableLayout new; hResizing: #spaceFill; vResizing: #spaceFill; listDirection: #topToBottom ; cellPositioning: #topLeft ; extent:200@150.
"Ajouter 4 lignes" 1 to: 4 do: [ :l | | r |
"la ligne est un morph arrangé avec un layout proportionel, les cellules seront ajoutées avec un LayoutFrame qui indiquera la position ds la ligne : 1/4 en largeur, 1 en hauteur" r _ RectangleMorph new beTransparent ; borderWidth: 0; layoutPolicy: ProportionalLayout new ; hResizing: #spaceFill ; vResizing: #spaceFill.
" ajout de la ligne au tableau" t addMorphBack: r.
" ajout de 4 cellules à la ligne" 1 to: 4 do: [ :c | | cell text string |
" la cellule a un layout proportionnel pour pouvoir centrer le texte (tip NedKonz)" cell _ RectangleMorph new borderWidth: 1 ; layoutPolicy: ProportionalLayout new ; borderStyle: (BorderStyle raised width: 2). string _ ''. (l = 1 and: [ c = 1 ]) ifTrue: [ string _ 'x']. (l = 1 and: [ c > 1 ]) ifTrue: [ string _ 'e', c asString ]. (l > 1 and: [ c = 1 ]) ifTrue: [ string _ 'e', (l + 2) asString ]. text _ StringMorph new contents: string.
" le textmorph est ajouté à la cellule, centré en lui donnant un offset égal à la moité de la largeur et hauteur du texte" cell addMorph: text fullFrame: (LayoutFrame new leftFraction: 0.5 offset: text width // -2 ; topFraction: 0.5 offset: text height // -2 ).
"Ajoute la cellule à la ligne, occupe 1/4 (0.25) de largeur de la ligne et hauteur 1 (100%)" r addMorph: cell fullFrame: (LayoutFrame fractions: (c-1*0.25@0 extent: 0.25@1)). ]. ].
t openInWorld.
"Alexandre Benoit" alexandre.benoit13@wanadoo.fr a écrit dans le message de news: 3F71EE21.1060501@wanadoo.fr...
Bonjour,
Je sais utiliser TableLayout pour aligner verticalement ou horizontalement des Morphs. Mais est-il possible de créer un tableau de Morph autrement qu'en alignant verticalement des Morphs qui sont eux-mêmes des alignements horizontaux de Morph ? Je pose la question par ce que pour moi ça revient pas au même. J'essaye de coder un jeu de logigramme où l'écran est divisé en trois parties.
- Une matrice de cases noires ou blanches.
- Une zone d'énoncé au dessus de la matrice avec un énoncé pour chaque
colonne. 3) Une zone d'énoncé à gauche de la matrice avec un énoncé par ligne. Les problèmes c'est qu'il faut mettre les énoncés bien en regard avec la matrice. En plus en haut à gauche il y a une zone vide qui décale tout. Schéma : ======= Vide e1 e2 e3 e4 x x x e5 x x x e6 x x x Si je fais un alignement vertical d'alignements horizontaux j'aurai du mal à faire coïncidé e1 e2 et e3 avec leurs colonnes respectives. Si je fais un alignement horizontal d'alignements verticaux j'aurai du mal à faire coïncidé e4 e5 et e6 avec leurs lignes respectives.
Avez-vous une suggestion à me faire ? Remarque j'ai pas envie d'utiliser un truc rigide avec placement "à la main" des sous Morphs comme dans MinesBoard>>adjustTiles par ce que ça supprime la possibilité de tout redimensionné en redimensionnant le Morph par exemple à l'aide du halo. Peut-être ma solution c'est le ProportionnalLayout, mais je connais pas bien ce Layout les tutoriaux parlent surtout de l'autre.
Merci de vos suggestions