JSL: 동적 표시 상자에서 PanelBox 크기 복원<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Panel Box() 개체는 내용이 확장됨에 따라 자동으로 크기를 조정합니다. 그러나 그 반대는 사실이 아닌 것 같습니다. 오른쪽 라디오 버튼을 누르면 아래 예제 스크립트에서 확인란 설명자가 확장됨에 따라 창이 늘어납니다. 왼쪽 라디오 버튼을 다시 선택하면 설명자가 짧아지지만 패널 상자(및 창)는 확장된 상태를 유지합니다.
패널 상자를 원래 크기로 되돌리려면 어떻게 해야 합니까? 아니면 이 점에서 "더 스마트한" 또 다른 디스플레이 상자 유형이 있습니까?
pb1 << Get Size를 사용하여 변수에 원래 크기를 저장하고 라디오 버튼 1을 다시 선택하면 이를 적용하려고 했지만 Panel Box()가 Set Size() 메시지를 인식하지 못하는 것 같습니다.
str =
{ "사례 1: 저용량 매우 긴 설명 매우 긴 설명 매우 긴 설명" ,
"사례 2: 고용량 정말 긴 설명 정말 긴 설명 정말 긴 설명"
} ;
short_str = 평가 목록 ( { 왼쪽 ( str [ 1 ] , 6 ) , 왼쪽 ( str [ 2 ] , 6 )} ) ;
pb1 = 특급 ( 패널박스 ( ,
hlb1 = V 목록 상자 ( 결핵 = 텍스트 상자 ( "케이스 선택" ) ,
CB = 체크박스 ( short_str ) ,
vlb1 = V 목록 상자 (
스페이서 박스 () ,
H 목록 상자 (
rb2 = 라디오박스 (
"이름 표시" ,
CB << 삭제 ;
vlb1 << 앞에 추가 ( CB = 체크박스 ( short_str ))) ,
rb1 = 라디오박스 (
"설명 표시" ,
CB << 삭제 ;
vlb1 << 앞에 추가 ( CB = 체크박스 ( str )))))))
) ;
pb2 = 만료 (
패널박스 ( ,
V 목록 상자 (
버튼 상자 ( "달리다" ) ,
버튼 상자 ( "취소" , << 창 닫기 ) ,
스페이서 박스 ()
))) ;
새창 ( "예" ,
HLB = H 목록 상자 ( pb1 , pb2 )
) ;
rb2 << 그룹 ( rb1 ) ;
JSL: 동적 표시 상자에서 PanelBox 크기 복원고마워요 데이브! 효과가있다. 나는 창 크기 설정() 대신 콘텐츠 크기 설정()을 사용하여 유사한 솔루션을 탐색했습니다. 적어도 이 예에서는 명령을 서로 바꿔서 사용할 수 있는 것 같습니다.
아직 한 가지 작은 단점이 있습니다. 두 개의 라디오 버튼 사이를 전환하면 두 번째 또는 세 번째마다 창 설정이 실패합니다. 그러면 창이 내용보다 작아집니다. 이 문제는 귀하와 내 솔루션 모두에서 발생합니다. 내 생각에는 코드 실행에서 일부 비동기성이 발생한다고 생각합니다. 예를 들어 prepend()가 완료되기 전에 창 크기를 가져오는 경우입니다. 그러나 rb1 버튼 스크립트에 Wait(0.01)를 삽입하면 특이한 동작이 제거되는 것 같습니다. 아래 발췌문을 참조하세요.
어쩌면 이것은 기계마다 다르므로 모든 사람에게 이상한 일이 발생하지 않을 수도 있습니다. 저는 꽤 빠른 Mac Pro에서 JMP 9.02를 실행합니다.
...If (NItems(ss_large)==0, 대기(0.01);
ss_large = nw << 창 크기 가져오기
,
nw << 창 크기 설정(ss_large[1],ss_large[2])
)...
다시 한 번 감사드립니다!
Re: JSL: 동적 표시 상자에서 PanelBox 크기 복원문제가 특별히 패널 상자에 있는 것 같지는 않습니다. 패널 상자를 제거해도 같은 문제가 발생합니다.
콘텐츠를 수용하기 위해 크기를 늘리는 것은 창 자체입니다.
따라서 제안한 솔루션은 창에 크기 조정을 적용하면 작동합니다.그러나 창 크기가 조정되면 자체적으로 크기가 조정되지 않으므로 크기 조정을 제어하여 창을 더 크게 또는 더 작게 만들 수 있습니다.
이 코드는 작동하는 것 같습니다 ...
str = {"사례 1: 저용량 정말 긴 설명 정말 긴 설명 정말 긴 설명",
"사례 2: 고용량 매우 긴 설명 매우 긴 설명 매우 긴 설명"};
short_str = 평가 목록( {Left( str[1], 6 ), Left( str[2], 6 )} );
ss_small = {};
ss_large = {};
pb1 = 특급(
테두리 상자( ,
hlb1 = V 목록 상자(
tb = 텍스트 상자( "대소문자 선택" ),
cb = 체크박스( short_str ),
vlb1 = V 목록 상자(
스페이서 박스(),
H 목록 상자(
rb2 = 라디오박스(
"이름 표시",
CB << 삭제;
vlb1 << 앞에 추가(
cb = 체크박스(
short_str
)
);
nw << 창 크기 설정(ss_small[1],ss_small[2])
),
rb1 = 라디오박스(
"설명 표시",
CB << 삭제;
vlb1 << prepend( cb = 체크박스( str ) );
(NItems(ss_large)==0인 경우,
ss_large = nw << 창 크기 가져오기
,
nw << 창 크기 설정(ss_large[1],ss_large[2])
)
)
)
)
)
)
);
pb2 = Expr( Panel Box( , V List Box( Button Box( "실행" ), Button Box( "취소", << 창 닫기 ), Spacer Box() ) ) );
뉴 = 새 창( "예제", hlb = H 목록 상자( pb1, pb2 ) );
rb2 << 그룹( rb1 );
ss_small = nw << 창 크기 가져오기;
데이브