question sur view et hide
sebastien26-Jan-2009/9:56:32+1:00
Bonjour,
une petite question sur view
au lancement de l'application je desire que certain bouton soit invisible et qu'ils n'apparaisent que lors d'une action comment faire
ex

rebol []
; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2
mafenetre : layout [
bt1: button 100x30 [show bt2]
bt2: button 100x30 [hide bt2]
]
view mafenetre
Bertrand26-Jan-2009/17:09:20+1:00
Comme ceci:
rebol []

; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2

mafenetre: layout [
  bt1: button "bouton1" 100x30 [show bt2]
  bt2: button with [
    text: "bouton2" 
    size: 100x30 
    show?: off
    action: [hide bt2]
  ]
]
view mafenetre

j'arrive à cacher le 'bouton 2' à l'ouverture du layout, puis à le faire apparaître grâce au 'bouton 1' ... mais je n'arrive pas à le re-cacher à l'aide de lui-même !

Est-ce qu'on peut cacher un élément à l'aide de lui-même ? (effacer le 'bouton2' avec le 'bouton2')
Bertrand26-Jan-2009/17:22:16+1:00
Ça y est ! Je crois que j'ai trouvé une solution :
rebol []

; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2

mafenetre: layout [
  bt1: button "bouton1" 100x30 [
    either find mafenetre/pane bt2 [
      show bt2
    ][
      append mafenetre/pane bt2 show mafenetre]
  ]
  bt2: button with [
    text: "bouton2" 
    size: 100x30 
    show?: off
    action: [remove find mafenetre/pane bt2]
  ]
]
view mafenetre


Il faudrait peut-être "aérer" un peu le code ou même le simplifier si c'est possible.
none26-Jan-2009/17:48:12+1:00
REBOL []
; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2

mafenetre: layout [
    bt1: button "bouton1" 100x30 [
        either find mafenetre/pane bt2 [
            show bt2
        ][
            append mafenetre/pane bt2 show mafenetre
        ]
    ]
    
    bt2: button "bouton2" 100x30 [
        remove find mafenetre/pane bt2
    ] with [show?: off]
]

view mafenetre

Explications: (corrigez-moi si je me trompe !)
- Je mets l'attribut show? de bt2 à off ou false pour que ce bouton ne soit pas afficher lors du view mafenetre

- Lorsque je clique sur le bouton bt1, celui-ci vérifie si bt2 fait partie de mafenetre. Si oui il montre (show) bt2, sinon il l'ajoute (append) à mafenetre et réaffiche le tout (show mafenetre)

- Lorsque je clique sur le bouton bt2, celui-ci enlève (remove) purement et simplement de mafenetre le bouton bt2.

Voilà! L'inspiration m'est venue en consultant le word-browser à la rubrique 'hide'... (très intéressant le Word-Browser à côté de Anamonitor qui nous dévoile la face cachée des facets
ldci26-Jan-2009/18:27:05+1:00
L'approche semble correcte car comme il est précisé dans la doc http://www.rebol.com/docs/view-system.html#section-4.2


4.2 Hide Function
The hide function temporarily removes the face from view. It does not remove the face from its parent
face's pane.
Note that the face will become visible again the next time the face is shown either directly or indirectly
through one of its parent faces.
The hide function is rarely used in most applications. It is better to remove a face from the display
hierarchy then call show to refresh the parent face (hence, removing the face on the screen).
Bon code
sebastien27-Jan-2009/8:31:15+1:00
Merci pour vos reponse comme toujours très utile
mais il y a encore un petit souci pour les texte cela ne fonctionne pas
voici le code

REBOL []
; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2

mafenetre: layout [
bt1: button "bouton1" 100x30 [
either find mafenetre/pane bt2 [
show bt2   
][
append mafenetre/pane bt2 show mafenetre   
]
   
   either find mafenetre/pane montext [
show montext   
][
append mafenetre/pane montext show mafenetre   
]
]

bt2: button "bouton2" 100x30 [
remove find mafenetre/pane bt2
   remove find fenetre/pane montext
] with [show?: off]

montext: vtext "coucou" underline black with [show?: off]
]

view mafenetre
Bertrand27-Jan-2009/15:43:01+1:00
Peut-être en essayant comme ça :

REBOL []
; le bt2 ne doit être visible que si j'ai cliqué sur bt1
; le bt2 est de nouveau invisible après avoir cliquez sur bt2

mafenetre: layout [
    bt1: button "bouton1" 100x30 [
        either find mafenetre/pane bt2 [
            show bt2   
        ][
            append mafenetre/pane bt2 show mafenetre   
        ]
        show montext
    ]

    bt2: button "bouton2" 100x30 [
        remove find mafenetre/pane bt2
        hide montext
    ] with [show?: no]

    montext: vtext "coucou" underline black
    do [montext/show?: no]
]

view mafenetre
sebastien27-Jan-2009/16:04:07+1:00
merci cela fonction comme voulu
j'avais pensé au montext/show? mais j'avais pas mis le do
parfois je suis con
Didec27-Jan-2009/16:24:51+1:00
Non, non, t'es pas con.

Le pb du texte est particulier : il n'a pas de taille défini. Si tu lui met une taille (100x20 par ex.) ton code fonctionne. Sans cela, On voit bien qu'il ne laisse pas assez de place pour le texte. C'est parcequ'il ne peut calculer sa taille correctement s'il est "show? = off" (si on fait un "print montext/size" dans le code de bt1, on obtient 4x4, soit juste la place de l'origine et du margin de montext/para : bref pas de place pour le texte.

Le bouton à une taille défini lui, du coup le pb ne survient pas.

La soluce de Bertrand résoud le problème car montext va être créé normalement, puis on le masque avec le "do [montext/show?: off]"

View n'est pas très agile avec le "show?". En espérant que ce soit mieux avec R3 (mais on a le temps pour ça).
Bertrand27-Jan-2009/18:14+1:00
Merci pour l'explication, Didec, car là, j'avoue, je n'en avais aucune. J'ai juste procédé en tâtonnant ...

J'avais d'abord pensé que text, n'ayant pas de champ 'action' (ou l'ayant à 'none') ne pouvait pas fonctionner comme un button ... mais c'est un peut sot comme raisonnement.

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2