대화
대화는 두 사람의 대화입니다. 두 사람은 일반적으로 다음과 같은 대화를 나눕니다.
- 조종사: (샌드위치를 다시 쟁반에 놓고) "경제에 대해 어떻게 생각하세요?"
- 부기장: (전화에서 쳐다보지 않고) "나는 인상이 필요합니다. 당신은 어떻습니까?"
- 조종사: (마늘 빵 부스러기를 닦으며) "음, 이번 주에는 별점 5개에서 먹겠습니다."
- 부조종사: (경기를 보고 인상을 찌푸리며) "그들의 치킨 수프는 맛있습니다."
그 두 사람은 대화 중에 다른 일을 할 수 있는 방식으로 정보를 교환하고 있습니다.
때때로 두 사람이 집중하는 대화 모드로 전환합니다.
- 조종사: "가스가 부족합니다."
- 부조종사: "다른 탱크로 바꾸세요."
- 조종사: "한 시간 전에 그랬어요."
- 부조종사: "이건 좋지 않아. 우리는 한 시간 더 물 위에 있을 것입니다."
- 조종사: "아이디어가 있지만 당신은 그것을 좋아하지 않을 것입니다."
이 모드에서 부조종사는 이제 솔리테어 게임을 무시하고 조종사는 샌드위치를 무시합니다.
대화 상자는 사람이 컴퓨터와 대화를 나누는 창입니다. JMP에는 모덜리스와 모달이라는 두 가지 종류의 대화 상자가 있습니다. 찾기/바꾸기 대화 상자는 모덜리스입니다. 조종사가 경제에서 음식으로 전환하는 것처럼 쉽게 열려 있고 창 간에 초점을 전환합니다. JMP의 저장 대화 상자는 모달입니다. JMP가 파일 저장 모드에 들어가면 파일이 저장되거나 저장이 취소될 때까지 아무 것도 방해할 수 없습니다. JSL은 사용자 정의 대화 상자(모달리스 또는 모달)를 생성하여 정보를 제공하고 답을 얻을 수 있습니다.
답변 받기
모달 대화 상자의 수명:
- 디스플레이 상자 트리 만들기
- 소유하고 디스플레이 상자 트리를 표시할 창을 엽니다.
- 창이 닫힐 때까지 기다리기
항목 1, 트리 빌드는 종종 새 창 기능에 대한 인수로 수행됩니다. 항목 2와 3은 새 창 기능입니다. 다음은 경고 상자 모달 대화 상자입니다.
rdata = New Window( title, <<MODAL></MODAL>
<
그냥 당신이 알아야한다고 생각 ...
이 작은 창의 양방향 대화 상자는 매우 간단합니다.
- JMP: "일어나! 이런 일이 있었어!"
- 당신: "알았어"
반환할 데이터가 없습니다. 새 창 함수는 값을 반환합니다. 확인 버튼을 눌렀는지 여부를 알려줍니다.
{Button( 1 )}
또는 OS에서 제공하는 닫기 버튼으로 창을 닫았습니다.
{Button( -1 )}
하나의 요소가 있는 목록을 반환합니다. 다음을 사용하여 취소 대 확인을 테스트할 수 있습니다. rdata["버튼"] -1 또는 1이 됩니다. 대화 상자에 CANCEL 버튼을 두지 않았으므로 아마도 신경 쓰지 않을 것입니다.
더보기...제목과 텍스트를 제공해야 할 뿐만 아니라 아이콘도 필요합니다. 나는 이와 같은 빠른 프로젝트를 위한 내장 아이콘에 대한 추가 기능을 좋아합니다. 필요한 경우 사용자 정의 비트맵도 만들 수 있습니다.
@Justin_Chilton 내장 JMP 아이콘
Mac에는 "오류" 아이콘이 없을 수 있습니다. 또는 다른 크기의 경고 아이콘
경고!
쓰레기
오래 전에 JMP는 창의 내용(표시 상자)을 이라는 내부 구조에 넣었습니다. 쓰레기 OS에 창을 닫도록 요청하기 전에쓰레기 많은 문제를 해결하고 때로는 의도하지 않은 부작용을 만들기 위해 시간이 지남에 따라 진화했습니다. 한 가지 부작용은 모달 대화 상자의 표시 상자를 JSL에서 사용할 수 있도록 하는 것이었습니다. 짧은 대화 상자가 닫힌 후 시간이 흘렀고 이것이 일부 사용자가 모달 대화 상자에서 답변을 검색하는 방법이었습니다. 말 그대로 휴지통에서 꺼내는 것입니다.
- 조종사: (마늘가루 냅킨을 쓰레기통에 던지며) "음, 좋아."
- 부기장: (코를 찡그리며) "이제 비워야 할 것 같아요. 아니면 조금 있으면."
문제 쓰레기 얼마나 채우고 언제 비울 것인지를 중심으로 회전합니다. JMP의 초기 버전에서는 다음 창이 표시될 때 휴지통이 비워졌습니다. 휴지통을 비우면 그 내용이 사라지고 해당 모달 대화 상자 변수도 사라집니다. 대부분 효과가 있었지만 다양한 문제를 해결하기 위해 계속 진화했습니다. 결국 @hecht_jmp 쓰레기 문제를 해결하는 최첨단 솔루션을 JMP에 넣었습니다. 하지만 모달 대화 상자에서 답을 얻기 위해서는 좀 더 많은 계획이 필요했습니다.
올바른 방법으로 답변 얻기
더 많은 데이터를 반환하려면 다음과 같이 요청해야 합니다. <<반환 결과 :
rdata = New Window( "modal dialog test",
<<MODAL></MODAL>
내가 그것을 입력하기 전에 "당신의 이름을 입력하십시오"라고 말했습니다.
{답변 = "크레이지", 버튼( 1 )}
당신이 사용할 수있는 rdata["답변"] 후 새창() 변수의 텍스트 상자에서 값을 가져오기 위해 반환 답변 . (먼저 취소 테스트를 수행하십시오.)
목록은 연관 배열과 같은가요?
위의 모든 예는 목록을 반환합니다. 목록의 항목은 모두 간단한 할당 문이나 일종의 함수 호출처럼 보입니다. JMP의 약간 사용되지만 잘 이해되지 않는 기능은 보다 일반적인 숫자 인덱스가 아니라 이러한 이름을 사용하여 목록을 첨자로 작성하는 것입니다.
result = New Window( "Tell us about yourself",
<<MODAL></MODAL>
Bob이 OK를 누르려고 합니다.
결과 값은 다음과 같을 수 있습니다.
{이름 = "밥", 제목 = "프로그래머", 버튼( 1 )}
또는 Bob이 취소하는 경우
{이름 = "밥", 제목 = "프로그래머", 버튼( -1 )}
If( result["Button"] == 1,
Write( Eval Insert( "\!n\[^result["name"]^ is a ^result["title"]^]\" ) )
, // else
Write( "\!nthe dialog canceled." )
);
밥은 프로그래머다
목록 하다 순차 조회로 수행되지만 연관 배열처럼 약간 작동합니다. (연관 배열이 필요하면 하나 만드십시오. 이 목록 동작을 사용하지 마십시오... 좋지 않은 대안입니다.)
모달 대화 의미
사용자가 모달 대화 상자에서 취소 버튼을 누르면 아무 것도 변경되지 않을 것으로 예상합니다. 모달 대화 상자의 모든 JSL은 프로그램의 나머지 부분에서 변수를 변경하지 않고 대화 상자를 작동해야 합니다. 더 큰 예가 있습니다. 보고서 실행을 위한 모덜리스 대화 상자가 있습니다.
이 창이 열려 있는 동안 다른 창에서 작업할 수 있습니다. 모덜리스 대화 상자입니다.
보고서 작성 버튼을 누를 때마다 다른 창이 열립니다.
모덜리스 런처의 값을 보여주는 보고서.
유효성 검사 루틴이 있는 모달 대화 상자를 여는 매개 변수 설정 버튼도 있습니다. 이 취소 버튼은 위의 런처에 변경 사항을 적용하지 않습니다.
유효성 검사 루틴은 또 다른 모달 대화 상자를 엽니다.
- 조종사: (눈을 찡긋하며) "이거 복잡해 보여!"
- 부조종사: "우리는 할 수 있습니다. 댓글이 있어요!"
// here's a simple modal window. It provides a warning, but no data is returned.
alert = Function( {title, text, icon = "error"},
New Window( title, <<MODAL></MODAL>