안녕하세요.
애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다.
'213'님이
'한 가지 궁금한점이있는데 on test1_lsb selected val do 여기서 val 은 어떤개념으로 접근해야하나요 ?? 여기 val을지우면 argument 애러가뜨긴하는데 ..'
라고 질문을 주셨는데요.
곰곰이 생각해보니 UI의 설명에서 '이렇게 하면 잘 돌아갑니다. 따라 해 보세요'정도의 설명만 해서 처음 시작하시는 분들은 '아~ 그렇구나'하고 넘어가지만, 실제로 무언가를 만들고 싶으신 분들에게는 부족한 설명이었던 것 같습니다.
그래서 '213'님이 질문하셨던 부분과 관련하여 조금 더 깊은(?) 설명을 하도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
rollout testRoll "Test!"
(
listbox test1_lsb "리스트박스1" items:#("가", "나", "다", "라", "마", "바", "사") height:4
on test1_lsb selected val do
(
format "항목 %를 클릭했고 %번째 입니다.\n" test1_lsb.items[val] val
)
on test1_lsb doubleClicked val do
(
format "항목 %를 더블 클릭 했습니다.\n" test1_lsb.items[val]
)
on test1_lsb rightClick do
(
format "마우스 오른쪽 버튼을 클릭했습니다.\n"
)
)
createdialog testRoll
|
cs |
'listbox'에 대한 설명 페이지는 여기입니다.
위 스크립트를 기준으로 이야기를 진행하겠습니다.
listbox <name> [<caption>] [items:<array_of_strings>] [selection:<number>] [height:<number>] [readOnly:<boolean>]
해당 문법을 보면 list박스를 생성할 때 하위 옵션으로 어떤 것이 있고 어떻게 쓰이는가에 대한 내용이 있습니다.
'213'님이 질문하신 질문은 'val'이란 변수가 어디서 와서 어디로 가는가 하는 건데요.
우선 'on test1_lsb selected val do'이벤트 함수에 대해 확인하겠습니다.
on <listbox> selected <arg> do <expr>
여기서 '<arg>'가 제가 예제로 사용한 스크립트의 'val'이 됩니다.'on <listbox> selected' 이벤트 함수는 맥스 스크립트에서 'listbox'의 'selection'을 받아 오도록 미리 정의되어 있기 때문에 이해를 하기보다는 그냥 그렇다고 알아두시면 맘이 편합니다.
위 스크립트에서는 'selection'이 생략되었기 때문에 더욱 이해하기 어려웠을 수도 있겠네요.
ㅎㅎㅎ'listbox'의 'selection'이 인수가 되는 것입니다.
그리고 이 인수를 이벤트 함수에서 받아들이는 인자가 'val'입니다.'왜? 무슨 원리로 그렇게 되는 거지?'라고 생각하신다면 4줄 위의 내용을 다시 읽어 주세요.
그렇기 때문에 'test1_lsb.items[val] val'에서 사용되는 'val'은 'selection'의 값을 사용하게 됩니다.
간단하게 이미지로 표현하면 이렇게 됩니다.
인자인 'val'은 어떤 변수명(맥스에서 미리 사용하는 예약명이 아닌)을 사용해도 동일하게 값을 받게 됩니다.
그렇다면 여기서 'listbox' 하위 옵션(속성)에 접근 방법에 대해서 알려 드리겠습니다.
자기 자신의 이벤트 함수 내에서는 큰 문제없이 사용하지만 다른 이벤트 함수나 외부에서는 접근을 할 수 없는 경우가 있습니다.
위 스크립트를 예로 들면 같은 'testRoll' 내부 또는 인수를 거치지 않고 직접 접근하고 싶을 때는 접근하고 싶은 UI이름 사용합니다.
'test1_lsb'.items
'testRoll' 외부에서 서용하고 싶을 때는 접근하고 싶은 UI가 어느 Rollout에 속한 지도 표기해야 합니다.
testRoll.'test1_lsb'.items
필요에 따라 'testRoll'에 접근이 어려울 경우 변수와 같이 전역화 시켜 사용해야 하는 경우도 발생합니다.
global testRoll
접근이 어려울 때는 위 내용을 잘 사용하시면 됩니다.
<listbox>.items Array Of Strings
'listbox' items에 들어가 있는 정보를 배열 형태로 보여주거나 변경할 수 있습니다.
사용 방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.items
testRoll.test1_lsb.items = #("가", "나", "하", "라", "마", "바", "사")
|
cs |
1번 라인 : 'items'의 내용 확인
2번 라인 : 'items'의 내용 수정
<listbox>.selection Integer
'listbox'에서 현재 선택된 'item'을 보여주거나 변경합니다.
사용방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.selection
testRoll.test1_lsb.selection = 3
|
cs |
1번 라인 : 'items'의 선택 번호 확인
2번 라인 : 'items'의 선택 번호 수정
<listbox>.selected String
'listbox'에서 선택한 'item'의 내용을 출력하거나 변경할 수 있습니다.
사용방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.selected
testRoll.test1_lsb.selected = "미"
|
cs |
1번 라인 : 'items'의 선택 내용 확인
2번 라인 : 'items'의 선택 내용 수정
<listbox>.readOnly
'listbox'의 선택 여부를 확인하거나 변경할 수 있습니다.
사용방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.readonly
testRoll.test1_lsb.readOnly = true
|
cs |
1번 라인 : 'items'의 선택 여부 확인
2번 라인 : 'items'의 선택 여부 수정
리스트 박스를 생성할 때는 정상적으로 세팅이 되는데 이후 확인과 변경에서는 에러가 발생하고 있네요.
(예전에 됐던 거로 기억하고 있는데요.ㅎㅎㅎ)
<listbox>.width Integer
'listbox'의 너비를 픽셀 단위로 확인하거나 변경할 수 있습니다.
사용방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.width
testRoll.test1_lsb.width = 150
|
cs |
1번 라인 : 'items'창의 너비 확인
2번 라인 : 'items'창의 너비 번호 수정
<listbox>.height Integer
'listbox'의 높이를 픽셀 단위로 확인하거나 변경할 수 있습니다.
사용방법은 다음과 같습니다.
1
2
|
testRoll.test1_lsb.height
testRoll.test1_lsb.height = 20
|
cs |
1번 라인 : 'items'창의 높이 확인
2번 라인 : 'items'창의 높이 수정
이 정도로 이야기하면 될 것 같네요.
읽으시느라 수고하셨습니다. ㅎㅎ
'맥스스크립트 심화' 카테고리의 다른 글
RolloutCreator Functions(4) (0) | 2021.04.08 |
---|---|
RolloutCreator Functions(3) (0) | 2021.04.07 |
RolloutCreator Functions(2) (0) | 2021.04.06 |
RolloutCreator Functions(1) (2) | 2021.04.05 |
바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(3) (0) | 2021.03.11 |
바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(2) (2) | 2021.03.10 |
바이패드 Bip파일 불러오거나Bip파일과 XML파일 불러오기(1) (3) | 2021.03.10 |
슬롯머신(6) (0) | 2019.10.01 |