안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
이전 시간에 이어서 동적 UI를 계속 이야기하겠습니다.
오늘은 동적 UI를 만들 수 있는 'RolloutCreator Functions'의 문법에 대해서 설명하겠습니다.
rolloutCreator <rollout_name> <rollout_caption>
rolloutCreator의 인스턴스를 만들고 그것을 변수에 할당할 수 있습니다.
사용방법은 다음과 같습니다.
1
|
rci = rolloutCreator "myRollout" "My Rollout"
|
cs |
위 내용을 입력하여 실행을 하면 아래와 같은 결과를 보여줍니다.
rci 변수에 생성된 rollout인스턴스 값을 저장합니다. (딱히 뭔가 작동하지는 않습니다.)
<rollout_creator>.begin()
위에서 저장된 값을 이용하여 사용됩니다.
인스턴스를 생성한 바로 다음에 사용합니다.
<rollout_creator>.addControl <control_type> <control_name> <control_caption> [ paramStr:<string>]
롤아웃에 컨트롤을 추가합니다.
<control_type> : #button, #spinner, #activeXControl 등 과 같은 롤아웃 컨트롤을 사용합니다.
<control_name> : 롤아웃 컨트롤의 참조에 사용되는 변수 명을 적습니다.
<control_caption> : 화면상에 표시될 캡션을 적습니다.
[paramStr:] : 컨트롤에 전달해야 하는 모든 키워드 파라미터를 문자열로 표시합니다. 예) "width:100 height:20 align:#right"
예를 들면 다음과 같이 작성이 됩니다.
1
|
rci.addControl #button #myButton "My Button"
|
cs |
설명을 하자면 변수에 저장된 생성한 롤아웃 인스턴스에 버튼 컨트롤을 추가하고 그 버튼의 변수는 myButton로 정하며 화면에 표시되는 캡션은 "My Button"이 됩니다.
아직 스크립트를 다 작성한 것이 아니기 때문에 지금 실행하면 에러가 납니다.
<rollout_creator>.addHandler <control_name> <event_type> [paramStr:<string>] [codeStr:<string>] [filter:<boolean>]
추가된 컨트롤에 사용되는 이벤트 핸들러를 추가합니다.
<control_name> : 컨트롤 작성 중에 사용된 변수
<event_type> : 컨트롤에서 사용 가능한 이벤트 예) #changed, #pressed, #selected 등
[paramStr:<string>] : 맥스 헬프 사이트에서는 정확한 설명이 없네요.
저는 아래의 codeStr 부분에서 사용자 함수를 사용할 때 인수가 필요한 경우 인수 변수를 문자열로 표기하여 사용합니다.
[codeStr:<string>] : 명령어나 사용자 함수를 문자열 형태로 사용합니다.
만약 하위에 또 문자열을 사용해야 할 경우 " 대신 @를 사용합니다.
[filter:<boolean>] : 이 부분은 저도 잘 모르겠습니다. 저는 기본적으로 on을 사용합니다.
말이 많이 복잡해 보이는 예를 두 가지 보겠습니다.
1
|
rci.addHandler #myButton #pressed codeStr: "MessageBox @Hey@" filter:on
|
cs |
첫 번째 예는 이전에 만든 #myButton을 눌렀을 때(#pressed) 발생하는 핸들러로 MessageBox를 사용하여 "Hey"라는 문자를 표시합니다.
기존에 배운 방식대로라면
1
2
3
4
|
on myButton pressed do
(
MessageBox "Hey"
)
|
cs |
와 동일합니다.
다음으로
1
|
rci.addHandler #myCheckbox #changed paramStr:"val" codeStr:"myOtherCheckbox.state = not val"
|
cs |
는 이전에 만든 #myCheckbox를 변경했을 때 인수 변수 val값을 기억하여 myOtherCheckbox의 상태에 val의 반대 값을 전달합니다.
기존에 배운 방식대로라면
1
2
3
4
|
on myCheckbox changed val do
(
myOtherCheckbox.state = not val
)
|
cs |
와 동일합니다.
<rollout_creator>.end()
'<rollout_creator>.begin()'으로 열었기 때문에 닫아 줍니다.
필요한 컨트롤러와 이벤트 핸들러가 모두 작성됐다면, 모두 작성했다는 의미로 사용합니다.
이 함수는 롤 문자열을 만들고 평가하고 그 정의를 반환합니다.
반환된 정의는 createDialog 또는 addRollout 함수에 전달할 수 있습니다.(약간 뜬 구름 잡는 소리 같기는 한데 createDialog 또는 addRollout함수에서 이용된다는 의미입니다.)
지금까지 배운 내용을 모아 보겠습니다.
1
2
3
4
5
|
rci = rolloutCreator "myRollout" "My Rollout"
rci.begin()
rci.addControl #button #myButton "My Button"
rci.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Isn't this cool@ title:@Wow@"
createDialog (rci.end())
|
cs |
#이나 @가 사용된다는 것 외에는 딱히 어려운 부분은 없어 보여 설명은 따로 하지 않겠습니다.
실행해 보시면 어떤 원리로 동작하는지 아실 수 있을 겁니다.
오늘은 여기까지 진행하고 이전 시간에 해결하지 못했던 문제를 다음 시간에 해결하도록 하겠습니다.
'맥스스크립트 심화' 카테고리의 다른 글
RolloutCreator Functions(6) (0) | 2021.04.12 |
---|---|
RolloutCreator Functions(5) (0) | 2021.04.09 |
RolloutCreator Functions(4) (0) | 2021.04.08 |
RolloutCreator Functions(3) (0) | 2021.04.07 |
RolloutCreator Functions(1) (2) | 2021.04.05 |
맥스 스크립트 UI의 세부 사용법 (3) | 2021.03.14 |
바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(3) (0) | 2021.03.11 |
바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(2) (2) | 2021.03.10 |