Lua 스크립트 사용시 이미지맥스 내장 함수

에디터 특성상 내용이 길면 줄 간격이 맞지 않습니다.

이미지맥스 카페 내장함수 게시물을 참고 부탁드립니다.

https://cafe.naver.com/imagemax/302

 

이미지맥스는 직관적이고 사용이 쉬운 UI를 채택하면서

UI에서 지원하지 않는 부분은 Lua 스크립트로 보완할 수 있습니다.

Lua 문법에 따라 변수, 함수, 조건문, 반복문, 각종 연산 등을 수행할 수 있으며

다음과 같은 이미지맥스의 내장함수를 호출할 수 있습니다.

현재까지 추가된 내장함수는 다음과 같습니다.

 

-- ms(밀리초)동안 현재 쓰레드(이미지맥스)의 실행을 일시 중단합니다.

Sleep(uint ms)

-- 예제) Sleep(500) -- 0.5초 딜레이

-- 시스템이 시작된 이후 경과한 시간(밀리초)을 반환합니다.

 

t = GetTickCount()

-- 리턴값: 64비트 부호없는 정수

 

-- 로그창에 text를 출력합니다.

print(string text)

 

-- 현재 액션 이후 다음 액션 n개를 건너뜁니다.

PassAct(uint count)

-- 현재 액션 이후 다음 액션들을 모두 건너뜁니다.

PassAllAct()

-- 현재 액션 이후 인식 실패시 액션으로 건너뜁니다.

GotoFailAct()

 

-- 이미지를 활성 또는 비활성 상태로 변경합니다.

EnableImage(bool enable, string imagename)

-- enable: true or false

 

-- 이미지의 활성/비활성 상태를 묻습니다.

ret = IsEnableImage(string imagename)

-- 리턴값: true or false

 

-- 멀티이미지 인식을 수행합니다.

ret = MultiImage(string opimage)

-- 리턴값: 인식여부(0,1)

예제1) ret = MultiImage('이미지001&이미지002')

예제2) ret = MultiImage('이미지001|(이미지002&이미지003)')

예제3) ret = MultiImage('이미지001|("이미지001(2)"&이미지003)') -- 이미지이름에 ()가 포함된 경우 따옴표 사용

 

-- 다음 인식 순서를 해당 이미지로 변경합니다.

GotoImage(string imagename)

-- 이미지를 인식합니다.

ret, acc, ix, iy, sx, sy = ImageSearch(string imagename)

ret, acc, ix, iy, sx, sy = ImageSearch(string imagename, int acc, int[] roi)

-- 리턴값: 인식여부(0,1), 유사도, 이미지센터기준 x, y, 이미지원점기준 x, y

예제) ret, acc, ix, iy = ImageSearch('이미지001')

if(ret == 1) then

print('이미지001 발견')

Mouse(LBUTTON, CLICK, ix, iy) -- 이미지001 위치 클릭

end

참고) 반복문에서 ImageSearch 함수를 호출하여 0.01초 단위의 순간적으로 변화되는

이미지를 인식하려면 내장 변수 imagesearch_refresh = 1로 변경하여야 합니다.

 

-- 이미지 인식 성공시 클릭합니다.

ret = ImageClick(string imagename)

ret = ImageClick(string imagename, int x, int y, int rand_x, int rand_y, double delaysec)

-- x, y: 이미지센터기준 클릭 offset

-- rand_x, rand_y: 랜덤 offset(기본값: 5, 5)

-- delaysec: 이미지 클릭 후 딜레이(초)

-- 리턴값: 인식여부(0,1)

 

-- 최근 찾은 이미지를 클릭합니다.

ImageClick()

ImageClick(nil, x, y, rand_x, rand_y, delaysec)

-- imagename이 nil인 경우 최근 찾은 이미지

예제) '이미지 클릭' 액션과 동일한 ImageClick() 스크립트

 

-- 이미지를 저장할 당시 위치를 강제로 클릭합니다.

ImageClickForce(string imagename)

ImageClickForce(string imagename, int x, int y, int rand_x, int rand_y, double delaysec)

-- x, y: 이미지센터기준 클릭 offset

-- rand_x, rand_y: 랜덤 offset(기본값: 5, 5)

-- delaysec: 이미지 클릭 후 딜레이(초)

예제) ImageClickForce('이미지001') -- 이미지서치 안하고 저장된 위치 강제 클릭

-- 이미지의 ROI를 변경합니다.

런타임시 원본이미지의 ROI가 변경되며 Stop상태가 될 때까지 유지됩니다.


-- 마우스 입력을 수행합니다.

Mouse(LBUTTON, CLICK, int x1, int y1)

Mouse(LBUTTON, CLICK, int x1, int y1, int x2, int y2, int rand_x, int rand_y, double delaysec, int iteration, speed, type)

-- arg1: LBUTTON|RBUTTON|MBUTTON -- 버튼

-- arg2: CLICK|DBCLICK|MOVE|DOWN|UP|WHEELUP|WHEELDOWN -- 이벤트

-- x1, y1: 입력 시작 좌표

-- x2, y2: 입력 해제 좌표

-- rand_x, rand_y: 랜덤 좌표(기본값: 5, 5)

-- delaysec: 마우스 입력 후 딜레이(초)

-- iteration: 입력 반복 횟수

-- speed: FASTEST|FASTER|NORMAL|SLOWER|SLOWEST -- 속도

-- type: MKEVENT|MESSAGE -- 입력방식 (활성,비활성)

예제1) Mouse(LBUTTON, CLICK, 100, 100) -- 인식 대상 창 기준 (100, 100) 좌표 클릭

예제2) Mouse(LBUTTON, WHEELDOWN, 100, 100) -- 인식 대상 창 기준 (100, 100) 좌표 휠 다운

예제3) Mouse(LBUTTON, CLICK, 100, 100, 0, 0, 0, 0, 0.5, 1, FASTER, MKEVENT) -- 활성 입력으로 (100, 100) 좌표 클릭

 

 

-- 마우스 드래그를 수행합니다.

MouseDrag(LBUTTON, int x1, int y1, double press_sec1, int x2, int y2, double press_sec2)

MouseDrag(LBUTTON, int x1, int y1, double press_sec1, int x2, int y2, double press_sec2, int rand_x, int rand_y, double delay_sec, int iteration, speed, type)

-- arg1: LBUTTON|RBUTTON|MBUTTON -- 버튼

-- x1, y1: 드래그 시작 좌표

-- press_sec1: 시작 좌표 마우스 누름 딜레이(초)

-- x2, y2: 드래그 마지막 좌표

-- press_sec2: 마지막 좌표 마우스 누름 딜레이(초)

-- rand_x, rand_y, delay_sec, iteration, speed, type: 상동(Mouse 함수와 동일)

예제) MouseDrag(LBUTTON, 100, 100, 0.5 200, 200, 2.0) -- 인식 대상 창 기준 (100, 100) 0.5초간 누름 -> (200, 200) 좌표로 드래그하여 2초 후 해제

 

-- 키보드 입력을 수행합니다.

Keybd(string text)

Keybd(string text, speed, type)

-- speed: FASTEST|FASTER|NORMAL|SLOWER|SLOWEST -- 속도

-- type: MKEVENT|MESSAGE -- 방식 (활성,비활성)

예제) Keybd('<Ctrl_Press>v<Ctrl_Release>', FASTER, MKEVENT) -- Ctrl+v를 활성방식 입력

Keybd('<Left_Press><Delay_500>1<Delay_500><Left_Release>') -- Left+1

 

ret = SetImageROI(string imagename, int[] roi)

예제) roi = {0, 0, 1280, 720} -- {x, y, w, h}

SetImageROI('이미지001', roi)

-- 이미지의 ROI를 가져옵니다.

roi = GetImageROI(string imagename)

예제) -- 화면 중심부근에 '소원나무'가 없으면 화면 전체에서 '소원나무'를 찾아서 '드래그'하는 예제입니다.

ret = ImageSearch('소원나무')

if(ret == 0) then

roi_old = GetImageROI('소원나무')

roi_new = {0, 0, 1280, 720} -- {x, y, w, h}

SetImageROI('소원나무', roi_new) -- 인식 범위를 넓혀서 다시 Search

ret, acc, ix, iy = ImageSearch('소원나무')

if(ret == 1) then

Mouse(LBUTTON, DRAG, ix, iy, 1280/2, 720/2) -- 소원나무를 화면 중앙으로 드래그

end

SetImageROI('소원나무', roi_old) -- 기존 인식 범위로 복구

end

 

-- n초간 사운드 파일(wav)을 재생합니다.

PlaySound(string wavfilename, int alarmsec)

-- 카톡 n번째(1번째방 index=0) 채팅방에 텍스트 또는 스크린샷을 전송합니다.

SendKakaoTalk(uint chatroomindex, string text, bool screenshot)

예제) SendKakaoTalk(0, '보스', false) -- 카톡 첫번째 상단고정 채팅방에 '보스' 텍스트 전송

SendKakaoTalk(0, '', true) -- 카톡 첫번째 상단고정 채팅방에 스크린샷 전송

-- 열려있는 카톡 채팅방에 텍스트 또는 스크린샷을 비활성 전송합니다.

(채팅창을 열어놓고 최소화 후 사용 가능)

SendKakaoTalk(string name, string text, bool screenshot)

예제) SendKakaoTalk('준영', '보스', false) -- 열려있는 '준영' 채팅방에 '보스' 텍스트 전송

SendKakaoTalk('준영', '', true) -- 열려있는 '준영' 채팅방에 스크린샷 전송

-- 텔레그램을 전송합니다.(텍스트 및 사진 첨부 가능)

SendTelegram(string token, string chat_id, string text, string photo_path)

-- 디스코드를 전송합니다.(텍스트 및 사진 첨부 가능)

SendDiscord(string webhook_url, string name, string text, string photo_path)

 

-- 인식 대상 창의 현재 화면을 스크린샷(png)으로 저장합니다.

filepath = SaveScreenshot() -- 화면 전체

SaveScreenshot(int[] roi)

SaveScreenshot(int x, int y, int w, int h)

SaveScreenshot(string filename)

SaveScreenshot(string filename, int x, int y, int w, int h)

-- 리턴값: 저장된 스크린샷 파일 경로

예제) filepath = SaveScreenshot() -- 화면 전체 스샷

SendTelegram(token, chat_id, "", filepath) -- 스샷 파일을 텔레그램으로 전송

-- 스크린샷(png) 파일을 저장할 경로를 지정합니다.

(한번 지정된 경로는 프로그램 종료시까지 유지되며, 경로를 지정하지 않으면

기본경로 "문서\Screenshot\스크립트명\날짜" 폴더에 저장됩니다.)

SetScreenshotDir(string dirpath)

예제1) SetScreenshotDir('D:\\Screenshot')

SaveScreenshot('test.png') -- 스크린샷을 'D:\\Screenshot\\test.png' 파일로 저장

예제2) SetScreenshotDir('../screenshot') -- 스크린샷을 '스크립트명/screenshot' 경로로 지정

SaveScreenshot() -- 스크린샷을 '스크립트명/screenshot/현재날짜_시간.png' 파일로 저장

참고) lua 스크립트의 현재 디렉토리(./)는 '스크립트명/action'

 

-- 프로그램을 Stop 상태로 만듭니다.

Stop()

-- Stop 상태인지 여부를 묻습니다.

ret = IsStop()

-- Pause 상태인지 여부를 묻습니다.

ret = IsPause()

 

-- PreScript를 재실행합니다.

ReloadPreScript()

 

-- 다른 스크립트를 열고 실행합니다.

OpenScript(string scriptname)

예제) OpenScript('LD플레이어재실행')

 

-- 메모리(이미지) 버퍼를 생성합니다.

bits = NewBits(int w, int h)

-- 리턴값: 메모리 시작 주소값

 

-- 메모리(이미지) 버퍼를 삭제합니다.

ReleaseBits(ulong bits)

 

-- 인식 대상 창의 특정 영역을 캡처하여 메모리 버퍼에 저장합니다.

CaptureScreen(ulong bits, int[] roi)

CaptureScreen(ulong bits, int x, int y, int w, int h)

예제) roi = {100, 100, 50, 50}

CaptureScreen(bits, roi)

 

-- 메모리 버퍼를 이미지 파일(png)로 저장합니다.

SaveImageFile(ulong bits, int w, int h)

예제) filepath = SaveImageFile(bits, roi[3], roi[4])

-- 인식 대상 창의 특정 영역을 메모리 버퍼와 비교합니다.

acc, fx, fy = BitsSearch( { ulong bits, int w, int h } , int[] roi )

-- arg1: 메모리 버퍼 {bits, w, h} table (주의: bits, w, h - key 고정)

-- arg2: 인식 대상창 {x, y, w, h} table

-- 리턴값: 유사도, 찾은 위치 시작좌표 x, y

예제) centerframe = {bits=nil, w=100, h=100}

centerframe.bits = NewBits(centerframe.w, centerframe.h)

roi = {600, 300, 100, 100}

CaptureScreen(centerframe.bits, roi)

Sleep(2000)

acc, fx, fy = BitsSearch(centerframe, roi) -- 2초전 캡처된 centerframe을 현재 roi 영역과 비교합니다

print('acc, fx, fy = '..acc, fx, fy)

ReleaseBits(centerframe.bits)

centerframe.bits = nil

 

-- 특정 윈도우의 핸들 값을 가져옵니다.

hwnd = FindWindow(string classname, string windowname)

-- 리턴값: 찾은 창 핸들

예제) hwnd = FindWindow('LDMultiPlayerMainFrame', 'LDMultiPlayer')

 

-- 특정 윈도우에 포함된 자식 윈도우의 핸들 값을 가져옵니다.

hwnd = FindWindowEx(HWND hwndParent, HWND hwndChildAfter, string classname, string windowname)

-- 리턴값: 찾은 자식 창 핸들

 

-- 특정 윈도우에 지정된 메시지를 보냅니다.

SendMessage(HWND hwnd, uint msg, uint wParam, uint lParam)

예제) local WM_CLOSE = 0x0010

SendMessage(hwnd, WM_CLOSE, 0, 0)

 

-- 특정 윈도우의 메시지큐에 지정된 메시지를 보냅니다.

PostMessage(HWND hwnd, uint msg, uint wParam, uint lParam)

예제) local WM_LBUTTONDOWN = 0x0201

PostMessage(hwnd, WM_LBUTTONDOWN, 0, 0)

 

-- 특정 윈도우를 활성화 시킵니다.

ActivateWindow(HWND hwnd, bool focus)

예제) hwnd = FindWindow('Notepad', '제목 없음 - Windows 메모장')

ActivateWindow(hwnd, true)

 

-- 특정 윈도우의 위치와 크기를 변경합니다.

MoveWindow(HWND hwnd, int x, int y, int w, int h)

예제) hwnd = FindWindow('Notepad', '제목 없음 - Windows 메모장')

MoveWindow(hwnd, 0, 0, 800, 500)

 

-- 인식 대상 창의 이름을 가져옵니다.

tw_name = GetTargetWindowName()

print('tw_name: '..tw_name)

 

-- 인식 대상 창의 핸들을 가져옵니다.

tw_handle = GetTargetWindowHandle()

print('tw_handle: '..string.format('0x%X', tw_handle))

(참고: 대상 창의 최상위 윈도우 핸들을 반환하는 함수는 GetTargetFrameHandle로 변경되었습니다.)

 

-- 인식 대상 창의 최상위 핸들을 가져옵니다.

tw_handle = GetTargetFrameHandle()

print('tf_handle: '..string.format('0x%X', tf_handle))

 

-- 인식 대상 창의 위치를 가져옵니다.

x, y, w, h = GetTargetWindowPos()

print('tw pos: '..x, y, w, h)

 

-- 인식 대상 창의 최상위 윈도우 위치를 가져옵니다.

x, y, w, h = GetTargetFramePos()

print('tf pos: '..x, y, w, h)

-- 특정 상황에서 '인식 대상 창 크기가 변경되는 경우' 이벤트 핸들러 함수를 정의할 수 있습니다.

Lua 스크립트에 OnTargetWindowSizeChanged 함수가 정의된 경우 호출되고

'인식 대상 창 크기 변경됨' 팝업창이 뜨지 않습니다.

예제)

function OnTargetWindowSizeChanged()

print('인식 대상 창 크기 변경됨')

x, y, w, h = GetTargetWindowPos()

print('target window pos: '..x, y, w, h)

if(w < 600) then

OpenScript('세로화면540x960')

end

end

-- 특정 상황에서 '인식 대상 창이 없어지는 경우' 이벤트 핸들러 함수를 정의할 수 있습니다.

Lua 스크립트에 OnTargetWindowNotFound 함수가 정의된 경우 호출되고

프로그램이 Stop 되지 않습니다.

예제)

function OnTargetWindowNotFound()

print('인식 대상 창 없음')

OpenScript('재실행')

end

-- 클립보드에 저장된 텍스트를 가져옵니다.

text = GetClipboardData()

-- 클립보드에 텍스트를 저장합니다.

ret = SetClipboardData(string text, bool unicode)

 

-- 현재 커서 (인식 대상 창 기준) 위치를 가져옵니다.

x, y = GetCursorPos()

-- (인식 대상 창 기준) x, y 좌표의 R,G,B값 또는 Int값을 가져옵니다.

r,g,b = GetPixelRGB(int x, int y)

color = GetPixelInt(int x, int y)

 

-- 이미지서치의 결과를 테이블 형식으로 가져옵니다. (찾은 위치를 모두 저장)

result_count, result_table = ImageSearchMultipleResults(string imagename, SORT_PTDIST, int[] ptCenter)

-- 리턴값: 결과 개수, 결과값 테이블 {필드명: acc, ix, iy, sx, sy}

-- arg1: 이미지이름 또는 이미지이름 테이블 {'이미지001', '이미지002'}

-- arg2: 결과값 정렬기준(SORT_PTDIST|SORT_ACC|SORT_COORD) - ptCenter거리순, acc유사도순, x,y좌표순

-- ptCenter: SORT_PTDIST 정렬시 기준 위치

예제1) '이미지001'에 해당하는 모든 위치를 테이블에 저장합니다.

result_count, result_table = ImageSearchMultipleResults('이미지001')

예제2) 결과값 저장시 x:100, y:100 좌표에 가까운 거리순으로 정렬합니다.

result_count, result_table = ImageSearchMultipleResults('이미지001', SORT_PTDIST, {100, 100})

테스트예제) 결과값이 저장된 위치에 순서대로 마우스 포인터를 이동합니다.

for i = 1, result_count do

print('result_table field: '..i, result_table[i].acc, result_table[i].ix, result_table[i].iy, result_table[i].sx, result_table[i].sy)

Mouse(LBUTTON, MOVE, result_table[i].ix, result_table[i].iy, 0, 0, 0, 0, 0.5, 1, FASTER, MKEVENT)

end

 

-- 특정 이미지에 대한 핫키를 등록합니다.

RegisterHotKey(string imagename, string hotkey, bool available_in_stop)

전처리 스크립트(PreScript)에 등록시 오토핫키로 활용 가능

예제) -- Ctrl+1을 누르면 이미지001 인식 후 액션 수행 (stop시에도 사용)

RegisterHotKey('이미지001', '<Ctrl>1', true)

-- Shift + 좌클릭시 이미지002 인식 후 액션 수행 (stop시 사용 안함)

RegisterHotKey('이미지002', '<Shift><LButton>', false)

-- 특정 이미지에 대한 핫키를 해제합니다.

UnregisterHotKey(string imagename)

-- lua 스크립트에 대한 핫키를 등록합니다.

RegisterScriptHotKey(string script_code, string hotkey, bool available_in_stop)

예제) -- Ctrl+R을 눌러 PreScript Reload (사용자 GUI 제작시 활용)

RegisterScriptHotKey('ReloadPreScript()', '<Ctrl>R', true)

 

-- 현재 순서의 이미지 이름을 가져옵니다.

imagename = GetCurImageName()

 

-- 실행중인 이미지맥스의 버전을 가져옵니다.

im_ver = GetIMVer()

 

-- ini 폴더의 ini_filename에 값을 저장합니다. (내부적으로 WritePrivateProfileString 호출)

IniSetValue(string app, string key, string value, string ini_filename)

-- app: key가 속해있는 section

-- key, value: 해당 key에 value를 저장

-- ini_filename: ini 폴더의 filename

 

-- ini 폴더의 ini_filename에서 값을 가져옵니다. (내부적으로 GetPrivateProfileString 호출)

value = IniGetValue(string app, string key, string ini_filename)

-- app: key가 속해있는 section

-- key, value: 해당 key에서 value를 가져옴(문자열)

-- ini_filename: ini 폴더의 filename 

 

-- 두 점 사이 거리를 구합니다.

dist = GetDist(double x1, double y1, double x2, double y2)

 

-- 두 점 사이 각도를 구합니다.

degree = GetDegree(double x1, double y1, double x2, double y2)

예제) dist = GetDist(100, 100, 200, 200)

degree = GetDegree(100, 100, 200, 200)

print('거리, 각도: '..dist, degree)

-- 출력결과) 거리, 각도: 141, 135

 

-- 특정 각도로 길이만큼 떨어진 점을 구합니다.

dx, dy = GetDeltaPoint(double degree, double length)

예제) dx, dy = GetDeltaPoint(degree, 75) -- degree:패드방향, 75:패드반지름

MouseDrag(LBUTTON, 145, 427, 0.5, 145+dx, 427+dy, 2.0) -- 2초간 degree방향으로 패드이동

 

-- 랜덤한 문자열을 구합니다.

rand_str = GetRandString(int len, bool allow_num)

-- len: 문자열 자리수

-- allow_num: 숫자 허용

예제) rand_str = GetRandString(5, true)

print('랜덤문자: '..rand_str)

-- 출력결과) 랜덤문자: czp3e

 

<< 이벤트 핸들러 함수 >>

-- STOP 버튼을 누르거나 STOP 이벤트 발생시 호출됩니다.

function OnStop(is_user)

print('Stop is_user: '..is_user) -- 사용자가 STOP 버튼을 눌른 경우 1

end

-- PAUSE 버튼을 누를시 호출됩니다.

function OnPause(is_pause)

print('Pause: '..is_pause)

end

-- 프로그램 종료시 호출됩니다.

function OnDestroy()

print('Destroy')

end

-- 사용자 GUI 설정파일 Open시 호출됩니다.

function OnOpenIni()

print('OpenIni')

end

-- 사용자 GUI 설정파일 Save시 호출됩니다.

function OnSaveIni()

print('SaveIni')

end

-- 사용자 GUI 설정파일 New시 호출됩니다.

function OnNewIni()

print('NewIni')

end

 

<< 사용자 GUI 함수 >>

-- 사용자 탭을 추가합니다.

-- tabname: 추가할 탭이름

-- ini_section: ini에 저장되는 섹션명 (nil이면 탭이름으로 저장)

GUIAddTab(string tabname, string ini_section)

-- GUI item을 추가할 탭을 지정합니다.

GUISetCurTab(string tabname)

-- 텍스트를 추가합니다.

-- x: 추가할 텍스트의 x좌표(0~360)

-- y: 추가할 텍스트의 y좌표(0~320)

-- w: 추가할 텍스트의 너비(-1이면 자동)

-- h: 추가할 텍스트의 높이(-1이면 자동)

-- text: 텍스트 내용

-- 리턴값: GUI item id

item_id = GUIAddText(int x, int y, int w, int h, string text)

-- 그룹박스를 추가합니다.

-- x, y, w, h, text, 리턴값: 상동

GUIAddGroup(int x, int y, int w, int h, string text)

-- 버튼을 추가합니다.

-- func: 버튼을 누르면 lua 스크립트에 정의된 func(함수)를 호출합니다.

GUIAddButton(int x, int y, int w, int h, string text, string func)

-- 체크박스를 추가합니다.

-- var: 체크박스에 체크시 var(변수)는 1이 됩니다. (체크 해제시 0)

GUIAddCheck(int x, int y, int w, int h, string text, string func, string var)

-- 라디오버튼을 추가합니다.

-- var: 버튼 선택시 var(변수)는 라디오버튼의 index가 됩니다. (0, 1, 2..)

(주의: 라디오버튼 그룹의 첫번째 버튼에만 var(변수)를 지정해야 합니다.)

GUIAddRadio(int x, int y, int w, int h, string text, string func, string var)

-- 콤보박스를 추가합니다.

-- text_table: 콤보박스에 추가할 텍스트 항목들

-- var: 항목 선택시 var(변수)는 콤보박스 항목의 index가 됩니다. (0, 1, 2..)

GUIAddCombo(int x, int y, int w, int h, string[] text_table, string func, string var)

-- 에디트박스를 추가합니다.

-- var: 에디트박스에 작성한 내용이 var(변수)에 저장됩니다.

GUIAddEdit(int x, int y, int w, int h, string text, string func, string var)

-- 현재까지 추가된 컨트롤을 윈도우에 보여줍니다.

GUIShow()

-- id에 해당하는 GUI item을 숨기거나 보여줍니다.

GUIItemShow(int id, bool show)

예제) -- 버튼1을 추가 후 숨김

btn1_id = GUIAddButton(10, 50, -1, -1, '버튼1', 'onButton1')

GUIItemShow(btn1_id, false)

-- id에 해당하는 GUI item을 활성 또는 비활성 상태로 만듭니다.

GUIItemEnable(int id, bool enable)

-- id에 해당하는 GUI item의 상태를 강제로 수정합니다.

GUIItemUpdate(int id, int value)

GUIItemUpdate(int id, string value)

-- GUIItemUpdate 이후 사용자 GUI를 갱신합니다.

GUIUpdate()

예제) 스크립트에서 UI 상태를 수정 후 화면 갱신

function onButton1(btn_id)

var_combo1 = 1

GUIItemUpdate(combo1_id, var_combo1) -- 버튼1을 누르면 combo1_id에 해당하는 UI 상태 변경

GUIUpdate() -- 수정된 값으로 화면 업데이트

end

comboText = {'선택1', '선택2', '선택3'}

combo1_id = GUIAddCombo(10, 170, -1, -1, comboText, 'onCombo1', 'var_combo1')

GUIAddButton(10, 50, -1, -1, '버튼1', 'onButton1')

-- id에 해당하는 콤보박스의 index(0,1,2)에 해당하는 항목 문자열을 가져옵니다.

string value = GUIComboGetText(int id, int index)

-- id에 해당하는 콤보박스의 텍스트 항목들을 재설정합니다.

GUIComboSetContent(int id, string[] text_table)

-- 사용자 GUI의 현재 설정 파일 이름을 가져옵니다.

string ini_name = GUIGetCurIniName()

-- 대화상자(팝업창)를 생성합니다.

-- dlgname: 추가할 대화상자 이름

-- ini_section: ini에 저장되는 섹션명

-- w, h: 대화상자 너비, 높이

-- 리턴값: GUI item id

dlg_id = GUIAddDialog(string dlgname, string ini_section, int w, int h)

-- id에 해당하는 대화상자에 해당 GUI item을 추가합니다.

-- parent_id: 대화상자 item id

-- x, y, w, h, text, func, var, 리턴값: 상동

GUIAddText(int parent_id, int x, int y, int w, int h, string text)

GUIAddGroup(int parent_id, int x, int y, int w, int h, string text)

GUIAddButton(int parent_id, int x, int y, int w, int h, string text, string func)

GUIAddCheck(int parent_id, int x, int y, int w, int h, string text, string func, string var)

GUIAddRadio(int parent_id, int x, int y, int w, int h, string text, string func, string var)

GUIAddCombo(int parent_id, int x, int y, int w, int h, string[] text_table, string func, string var)

GUIAddEdit(int parent_id, int x, int y, int w, int h, string text, string func, string var) 

GUIAddPicture(int parent_id, int x, int y, int w, int h, string photo_path)

GUIAddLink(int parent_id, int x, int y, int w, int h, string text, string url)

참고) 대화상자(Dialog)의 사용자 설정값을

저장하려면 IniSetValue, 가져오려면 IniGetValue 함수를 사용하셔야 합니다.

 

-- id에 해당하는 대화상자를 열거나 닫습니다.

GUIItemShow(int id, bool show, bool is_dlg_cancel)

예제) 대화상자 생성 후 열기 및 닫기

dlg_id = GUIAddDialog('대화상자', '옵션', 300, 200) -- 대화상자 생성

GUIAddButton(dlg_id, 10, 50, -1, -1, '버튼1', 'onButton1')

GUIItemShow(dlg_id, true) -- 대화상자(팝업창) 열기

GUIItemShow(dlg_id, false) -- 대화상자(팝업창) 닫기(확인 버튼 누른 경우)

GUIItemShow(dlg_id, false, true) -- 대화상자(팝업창) 닫기(취소 버튼 누른 경우)

-- 메시지 박스를 띄웁니다.

주의) 이미지맥스 쓰레드가 중지되므로 GUI 함수내에서만 사용 권장

MessageBox(string msg)

<< 사용자 GUI 샘플 코드 >>

-- 전처리 스크립트(PreScript)에 등록 후 사용

function onButton1(btn_id)

print('Button1')

end

function onCheck1(check_id)

print('check1: '..check1)

end

function onRadio1(radio_id)

print('radio1: '..radio1)

end

function onCombo1(combo_id)

print('combo1: '..combo1)

end

function onEdit1(edit_id)

print('edit1: '..edit1)

end

GUIAddTab('사용자')

GUISetCurTab('사용자')

GUIAddText(10, 10, -1, -1, '텍스트')

GUIAddButton(10, 50, -1, -1, '버튼', 'onButton1')

GUIAddCheck(10, 90, -1, -1, '체크', 'onCheck1', 'check1')

GUIAddRadio(10, 130, -1, -1, '선택1', 'onRadio1', 'radio1') -- 첫번째 라디오버튼에만 var지정

GUIAddRadio(70, 130, -1, -1, '선택2', 'onRadio1')

GUIAddRadio(130, 130, -1, -1, '선택3', 'onRadio1')

comboText = {'선택1', '선택2', '선택3'};

GUIAddCombo(10, 170, -1, -1, comboText, 'onCombo1', 'combo1')

GUIAddEdit(10, 210, -1, -1, '편집', 'onEdit1', 'edit1')

GUIShow()

GUISetCurTab('사용자')

사용자 GUI 샘플코드 실행화면 

 
 
추가되거나 보완되는 부분은 현재 게시물을 수정하도록 하겠습니다.