JSL: PanelBox-Größe im dynamischen Anzeigefeld wiederherstellen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Panel Box()-Objekte passen ihre Größe automatisch an, wenn der Inhalt erweitert wird. Das Gegenteil scheint jedoch nicht der Fall zu sein. Durch Drücken des rechten Optionsfelds wird im folgenden Beispielskript das Fenster gestreckt, während die Kontrollkästchendeskriptoren erweitert werden. Die erneute Auswahl des linken Optionsfelds führt zu kürzeren Deskriptoren, aber das Bedienfeldfeld (und das Fenster) behalten ihren erweiterten Zustand.
Wie kann ich erzwingen, dass die Panel-Box auf ihre ursprüngliche Größe zurückgesetzt wird? Oder gibt es einen anderen Display-Box-Typ, der in dieser Hinsicht „intelligenter“ ist?
Ich habe versucht, die Originalgröße in einer Variablen zu speichern (mit pb1 << Get Size) und diese anzuwenden, wenn Optionsfeld 1 erneut ausgewählt wird, aber Panel Box() scheint eine Set Size()-Meldung nicht zu erkennen.
str =
{ „Fall 1: niedrige Dosis, sehr lange Beschreibung, sehr lange Beschreibung, sehr lange Beschreibung“ ,
„Fall 2: hohe Dosis, sehr lange Beschreibung, sehr lange Beschreibung, sehr lange Beschreibung“
} ;
short_str = Bewertungsliste ( { Links ( str [ 1 ] , 6 ) , Links ( str [ 2 ] , 6 )} ) ;
pb1 = Ausdruck ( Panel-Box ( ,
hlb1 = V-Listenfeld ( tb = Textfeld ( „Fall auswählen“ ) ,
cb = Kontrollkästchen ( short_str ) ,
vlb1 = V-Listenfeld (
Distanzbox () ,
H-Listenfeld (
rb2 = Radiobox (
"Name anzeigen" ,
cb << löschen ;
vlb1 << voranstellen ( cb = Kontrollkästchen ( short_str ))) ,
rb1 = Radiobox (
"Beschreibung anzeigen" ,
cb << löschen ;
vlb1 << voranstellen ( cb = Kontrollkästchen ( str )))))))
) ;
pb2 = Ausdruck (
Panel-Box ( ,
V-Listenfeld (
Button-Box ( "Laufen" ) ,
Button-Box ( "Stornieren" , << Fenster schließen ) ,
Distanzbox ()
))) ;
Neues Fenster ( "Beispiel" ,
hlb = H-Listenfeld ( pb1 , pb2 )
) ;
rb2 << Gruppe ( rb1 ) ;
JSL: PanelBox-Größe im dynamischen Anzeigefeld wiederherstellenDanke Dave! Es klappt. Ich habe eine ähnliche Lösung untersucht, indem ich set content size() anstelle von set window size() verwendet habe. Zumindest in diesem Beispiel scheinen die Befehle austauschbar zu sein.
Es gibt noch eine kleine Besonderheit. Beim Umschalten zwischen den beiden Optionsfeldern schlägt die Fenstereinstellung jedes zweite oder dritte Mal fehl. Das Fenster wird dann kleiner als sein Inhalt. Dieses Problem tritt sowohl bei Ihrer als auch bei meiner Lösung auf. Ich denke, dass dies auf eine gewisse Asynchronität bei der Codeausführung zurückzuführen ist, z. B. dass die Fenstergröße abgerufen wird, bevor prepend() abgeschlossen ist. Allerdings scheint das Einfügen von Wait(0.01) in das rb1-Schaltflächenskript das eigenartige Verhalten zu beseitigen. Siehe Auszug unten.
Möglicherweise ist dies maschinenspezifisch, sodass die Kuriosität möglicherweise nicht bei jedem auftritt. Ich verwende JMP 9.02 auf einem ziemlich schnellen Mac Pro.
...If (NItems(ss_large)==0, Wait(0.01);
ss_large = nw << Fenstergröße ermitteln
,
nw << Fenstergröße festlegen(ss_large[1],ss_large[2])
)...
Danke noch einmal!
Betreff: JSL: PanelBox-Größe im dynamischen Anzeigefeld wiederherstellenIch glaube nicht, dass das Problem speziell bei der Panelbox liegt – das gleiche Problem tritt auf, wenn man die Panelbox entfernt.
Es ist das Fenster selbst, das seine Größe vergrößert, um den Inhalt aufzunehmen.
Die von Ihnen vorgeschlagene Lösung funktioniert also, wenn Sie die Größenänderung auf das Fenster anwenden.Sobald jedoch die Größe eines Fensters geändert wird, ändert sich die Größe nicht mehr von selbst. Sie müssen also die Größenänderung steuern, um es sowohl größer als auch kleiner zu machen.
Dieser Code scheint zu funktionieren ...
str = {"Fall 1: niedrige Dosis, sehr lange Beschreibung, sehr lange Beschreibung, sehr lange Beschreibung",
„Fall 2: hohe Dosis, sehr lange Beschreibung, sehr lange Beschreibung, sehr lange Beschreibung“};
short_str = Eval List( {Left( str[1], 6 ), Left( str[2], 6 )} );
ss_small = {};
ss_large = {};
pb1 = Ausdruck(
Randfeld( ,
hlb1 = V Listbox(
tb = Textfeld( „Fall auswählen“),
cb = Kontrollkästchen( short_str ),
vlb1 = V Listbox(
Abstandsbox(),
H-Listenfeld(
rb2 = Radiobox(
"Name anzeigen",
cb << löschen;
vlb1 << prepend(
cb = Kontrollkästchen(
short_str
)
);
nw << Fenstergröße festlegen(ss_small[1],ss_small[2])
),
rb1 = Radiobox(
"Beschreibung anzeigen",
cb << löschen;
vlb1 << prepend( cb = Check Box( str ) );
Wenn (NItems(ss_large)==0,
ss_large = nw << Fenstergröße ermitteln
,
nw << Fenstergröße festlegen(ss_large[1],ss_large[2])
)
)
)
)
)
)
);
pb2 = Expr( Panel Box( , V List Box( Button Box( "Run" ), Button Box( "Cancel", <
nw = Neues Fenster( „Beispiel“, hlb = H List Box( pb1, pb2 ) );
rb2 << Gruppe( rb1 );
ss_small = nw <
Dave