JSL : restaurer la taille du PanelBox dans la zone d'affichage dynamique<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Les objets Panel Box() adaptent automatiquement leur taille à mesure que le contenu se développe. Cependant, l’inverse ne semble pas être vrai. Appuyer sur le bouton radio droit Dans l'exemple de script ci-dessous, la fenêtre s'étend à mesure que les descripteurs des cases à cocher se développent. La resélection du bouton radio de gauche entraîne des descripteurs plus courts, mais la boîte de panneau (et la fenêtre) conserve son état développé.
Comment puis-je forcer le boîtier du panneau à revenir à sa taille d'origine ? Ou existe-t-il un autre type de présentoir qui est « plus intelligent » à cet égard ?
J'ai essayé de sauvegarder la taille d'origine dans une variable (en utilisant pb1 << Get Size) et de l'appliquer lorsque le bouton radio 1 est resélectionné, mais Panel Box() ne semble pas reconnaître un message Set Size().
str =
{ "cas 1 : faible dose, description très longue, description très longue, description très longue" ,
"cas 2 : dose élevée, description très longue, description très longue, description très longue"
} ;
short_str = Liste d'évaluation ( { Gauche ( str [ 1 ] , 6 ) , Gauche ( str [ 2 ] , 6 )} ) ;
pb1 = expression ( Panneau électrique ( ,
hlb1 = Zone de liste V ( tuberculose = Zone de texte ( "Sélectionner un cas" ) ,
CB = Case à cocher ( short_str ) ,
vlb1 = Zone de liste V (
Boîte d'espacement () ,
Zone de liste H (
rb2 = Boîte radio (
"Afficher le nom" ,
CB << supprimer ;
vlb1 << ajouter un préfixe ( CB = Case à cocher ( short_str ))) ,
rb1 = Boîte radio (
"Montrer la description" ,
CB << supprimer ;
vlb1 << ajouter un préfixe ( CB = Case à cocher ( str )))))))
) ;
pb2 = Expr (
Panneau électrique ( ,
Zone de liste V (
Boîte à boutons ( "Courir" ) ,
Boîte à boutons ( "Annuler" , << Fermer la fenêtre ) ,
Boîte d'espacement ()
))) ;
Nouvelle fenetre ( "Exemple" ,
hlb = Zone de liste H ( pb1 , pb2 )
) ;
rb2 << groupe ( rb1 ) ;
JSL : restaurer la taille du PanelBox dans la zone d'affichage dynamiqueMerci Dave! Ça marche. J'ai exploré une solution similaire en utilisant set content size() au lieu de set window size(). Les commandes semblent interchangeables, du moins dans cet exemple.
Il y a quand même une petite bizarrerie. Lorsque vous basculez entre les deux boutons radio, le réglage de la fenêtre échoue toutes les deux ou trois fois. La fenêtre devient alors plus petite que son contenu. Ce problème se pose à la fois dans vos solutions et dans les miennes. Je pense que cela résulte d'une certaine asynchronie dans l'exécution du code, par exemple que la taille de la fenêtre est récupérée avant que le prepend() ne soit terminé. Cependant, l'insertion de Wait(0.01) dans le script du bouton rb1 semble éliminer le comportement particulier. Voir extrait ci-dessous.
Peut-être que c'est spécifique à la machine, donc cette bizarrerie peut ne pas arriver à tout le monde. J'exécute JMP 9.02 sur un Mac Pro assez rapide.
...Si (NItems(ss_large)==0, Attendez(0.01);
ss_large = nw << obtenir la taille de la fenêtre
,
nw << définir la taille de la fenêtre (ss_large[1],ss_large[2])
)...
Merci encore!
Re: JSL : restaurer la taille du PanelBox dans la zone d'affichage dynamiqueJe ne pense pas que le problème vienne spécifiquement du boîtier du panneau - vous obtenez le même problème si vous retirez le boîtier du panneau.
C'est la fenêtre elle-même qui augmente sa taille pour accueillir le contenu.
La solution que vous proposez fonctionne donc si vous appliquez le redimensionnement à la fenêtre.Cependant, une fois qu'une fenêtre est redimensionnée, elle ne se redimensionnera pas d'elle-même, vous devez donc contrôler le redimensionnement pour l'agrandir ou la réduire.
Ce code semble fonctionner...
str = {"cas 1 : faible dose, description très longue, description très longue, description très longue",
"cas 2 : dose élevée, description très longue, description très longue, description très longue"} ;
short_str = Eval List( {Gauche( str[1], 6 ), Gauche( str[2], 6 )} );
ss_small = {};
ss_large = {};
pb1 = Expr(
Zone de bordure ( ,
hlb1 = Zone de liste V (
tb = Zone de texte( "Sélectionner la casse" ),
cb = Case à cocher ( short_str ),
vlb1 = Zone de liste V (
Boîte d'espacement(),
Zone de liste H (
rb2 = Boîte radio (
"Afficher le nom",
cb << supprimer ;
vlb1 << préfixer(
cb = Case à cocher (
short_str
)
);
nw << définir la taille de la fenêtre (ss_small[1],ss_small[2])
),
rb1 = Boîte radio (
"Montrer la description",
cb << supprimer ;
vlb1 << prepend( cb = Check Box( str ) );
Si (NItems(ss_large)==0,
ss_large = nw << obtenir la taille de la fenêtre
,
nw << définir la taille de la fenêtre (ss_large[1],ss_large[2])
)
)
)
)
)
)
);
pb2 = Expr( Panel Box( , V List Box( Button Box( "Exécuter" ), Button Box( "Annuler", <
nw = Nouvelle fenêtre( "Exemple", hlb = H List Box( pb1, pb2 ) );
rb2 << groupe( rb1 );
ss_small = nw <
Dave