강좌,팁

[강좌:37] 테이블 셀로 파일을 드래그앤드롭하기

조회 수 29829 추천 수 0 2007.09.01 17:43:17
허창원 *.97.72.95

오늘은 작지만 두 개의 강좌를 올립니다. 두 번째 강좌입니다.

---------------------------------------------------------------------------------------

[강좌:37] 테이블 셀로 파일을 드래그앤드롭하기

이용된 버전: LabWindows/CVI 8.1.0
강좌분류: 테이블(Table) 활용팁 따라하기
등급: 초급

차례
서론
1. 이번 예제 프로그램의 개요
2. 작업준비
3. 코딩
   3.1 선언과 main() 함수
   3.2 Panel 콜백 함수
   3.3 cmdReset 명령 콜백 함수
4. 실행
마무리

 

서론
드래그앤드롭(Drag & Drop) 기능은 윈도 탐색기로부터 파일정보를 쉽게 전달할 수 있는 편리한 기능입니다. 이러한 기능을 테이블의 특정 셀에 적용할 수 있다면, 응용 프로그램 개발 시에 편리하게 이용할 수 있을 것입니다.

저는 어떤 프로그램에서 상황에 따라 음성안내를 해주는 기능을 구현하면서, 각 상황에서 재생되어야할 미디어 파일들의 경로를 테이블을 이용하여 설정해두기 위해 이러한 인터페이스를 만들게 되었습니다. 평소에도 이러한 조그만 기능들이 있으면 좋겠다는 생각을 가끔 했어도, 실제 일에 부딪치지 않으면 구현하기 위한 별도의 시간을 내기가 쉽지 않죠!
하지만, 이런 계기로 한번 작업해두면 다음에는 훨씬 더 빨리 이런 기능을 응용할 수 있으므로, 미래를 위한 기술 투자이며, 이런 것이 쌓여갈 때 기술 축적이 되는 것이 아니겠습니까?
라이브러리로 만드는 함수는 신중하게 잘 만들어 두면, 나중에 훨씬 편리합니다. 그죠?
그럴려면 너무 시간에 쫒기는 개발이 되어서는 곤란하죠! 그런 계약은 쎄게 불러야합니다.ㅎㅎ

1. 이번 예제 프로그램의 개요
이번 따라하기 예제의 결과 프로그램 실행화면을 그림 1.1에 보였습니다.
열은 하나밖에 표시하지 않았지만, 여러개의 열, 행이 있어도 문제없습니다. 그림에는 윈도 탐색기로부터 파일을 하나씩 드래그하여 놓은 화면을 보였습니다.

그림 1.1 테이블 셀로 파일을 드래그하여 놓기 예제 프로그램의 최종 실행화면 미리보기

2. 작업준비
작업 준비 과정은 "[강좌:21] CVI 프로그래밍 시작단계 정의(2)" 강좌 글의
"2. LabWindows/CVI의 프로그래밍 작업 시작단계" 부분에 따라 아래와 같이 간단히 정리합니다.

프로젝트 파일명: DragIntoTableCell.prj

화면구성은 그림 2.1에 보였습니다. 테이블 컨트롤과 명령버튼이 있습니다. 콜백함수는 Panel 콜백과 Reset 명령버튼의 콜백함수만 이용됩니다.

그림 2.1 DragIntoTableCell 프로젝트의 화면구성

uir 파일 내의 각 컨트롤의 속성은 표 2.1과 같이 설정하였습니다.

표 2.1 컨트롤의 속성값

컨트롤 종류 Constant Name Callback Function Label Default
Value
비고
Text Message

TEXTMSG

  해당없음

탐색기로부터 파일을 드래그하여 원하는 셀에 놓아보세요.

 

Table

TABLE

 

 

 

Column을 한 개 추가하고, String Type으로 설정.

Command Button

cmdReset

cmdReset

Reset

 

 

 

Panel의 속성은 표2.2와 같이 설정합니다.

표 2.2 Panel의 속성설정

Panel 속성설정

Constant Name

PANEL

Callback Function

PanelCB

Panel Title

DragIntoTableCell

Other Attributes

 

그리고, 기본 소스를 생성합니다. 기본으로 생성된 함수는 main() 함수와 PanelCB(), cmdReset() 콜백함수들입니다. 그림 2.2에 프로젝트 창을 보였습니다.

그림 2.2 DragIntoTableCell의 프로젝트 창

3. 코딩
이제 코딩 작업으로 들어갑니다. 먼저, 헤더파일을 잠깐 보겠습니다. 그림 3.1을 보시면 자동으로 생성된 파일 그대로입니다. 이런 헤더파일(UIR 파일을 저장할 때 자동생성되는)은 손을 댈 필요가 없으며, 손을 대지 않는 것이 좋으며, 어떨 때는 손을 대지 말아야 합니다. (세 번 언급하는 강조 표현의 일종이라 보세요.ㅎㅎ)

그림 3.1 UIR 파일 저장시에 자동 생성되는 헤더파일(DragIntoTableCell.h 파일)
(소스코드 이미지를 클릭하면 소스 텍스트 창이 나타난다는 거 아시죠?)

3.1 선언과 main() 함수
그림 3.2에 헤더파일 include 부분과 main() 함수를 보였습니다.

그림 3.2 헤더파일 include 부분과 main()함수 (DragIntoTableCell.c 파일)

소스코드 윗부분의 저작권 표시 부분에 있는 문구, 특히 "하나님의 은총이 가득하시기를..." 이라는 문구는 제가 의도적으로 노출시킵니다. 이 글을 읽는 분들에게 진심으로 신(God)의 가호가 있기를 바라는 마음일 뿐 아니라, 이 글을 통하여 제가 믿는 하나님께 영광을 돌리려는 목적입니다. 이런 목적이 있기 때문에, 시간과 노력이 많이 들어가는 이런 강좌를 기꺼이 만들어 나갈 수 있는 것입니다. 이점, 독자 여러분의 이해를 바랍니다.

3.2 Panel 콜백 함수
그림 3.3에는 Panel의 콜백함수를 보였습니다. 이 강좌에서 핵심 부분이 여기에 있습니다.
간단히 설명하면, 드래그앤드롭 이벤트가 발생했을 때, 먼저 드롭된 위치를 알아내고, 그 위치에 테이블이 있는지 여부를 체크하고, 만약 있다면, 드롭된 좌표에 있는 테이블 셀의 위치를 알아내어 그 셀에 파일의 경로를 기록합니다.
그리고, 그 셀의 행을 Active Cell로 지정합니다. 마지막의 Active Cell 지정하는 절차는 필수 과정은 아닙니다만, 이렇게 하면 프로그램의 동작이 좀더 자연스럽게 보입니다.

그림 3.3 Panel 콜백 함수부분(DragIntoTableCell.c 파일)

3.3 cmdReset 명령 콜백 함수
그림 3.3에는 Reset 명령버튼에 대한 콜백 함수를 보였습니다. 전체 행의 수를 구하여, 그 수만큼 루프문을 돌려서 해당 셀의 값을 초기화하도록 하였습니다. 실전에서는 테이블의 행의 수가 유동적인 경우가 많기 때문입니다.

그림 3.4 cmdReset 콜백 함수부분(DragIntoTableCell.c 파일)

4. 실행
이제 프로그램을 빌드하여 실행해 보겠습니다. 그림 4.1에 실행된 화면을 보였습니다.
윈도 탐색기로부터 파일을 하나씩 테이블의 셀에다 드래그하여 놓아 보십시오.

그림 4.1 실행화면

마무리
이렇게 해서 테이블의 각 셀에 파일을 드래그하여 놓는 예를 보았습니다. 여러분의 프로그램에 보다 더 직관적인 UI(User Interface) 구현에 도움이 되기를 바랍니다.

"일자리를 많이 창출하기 위한 기반을 마련하는 일에 프로그래머가 할 수 있는 일 중의 하나가 공개 소프트웨어를 많이 만들어 내는 것이라고 생각합니다"

감사합니다.

예제 프로그램 구상 및 작성: 1시간 22분 47초
강좌 문서 작성: 1시간 22분 4초
(총 2시간 45분)

극동테크(www.kdtechno.com) 허창원 드림


허창원

2008.03.13 16:34:29
*.68.47.59

마무리의 그 말... 그때의 생각이고,... 이후로 조금씩 더 발전되고 있습니다.
List of Articles
번호 제목 글쓴이 날짜 조회 수
» [강좌:37] 테이블 셀로 파일을 드래그앤드롭하기 file [1] 허창원 2007-09-01 29829
95 [강좌:36] 테이블 셀에서 체크박스 기능 이용하기 file 허창원 2007-09-01 21092
94 [팁:17] 사용가능한 Com Port 찾기 file 허창원 2007-08-18 30816
93 [강좌:35] 엑셀(Excel) 파일에 출력하기(양식 유지한채로) [6] 허창원 2007-04-08 52099
92 [팁:16] 엑셀파일(xls)로 저장하기 [4] 허창원 2007-03-29 34519
91 [에러 최소화 습관 팁] 아직 나타내지 않은 Panel의 Control 값을 Set할 때 [1] 허창원 2006-11-25 26761
90 [팁:15] 엑셀에서 지원하는 파일(csv) 생성하기 [1] 허창원 2006-11-23 28922
89 [강좌:34] CVI의 최소화 기능 개선 [3] 허창원 2006-11-18 24287
88 [요약] [강좌:34] CVI의 최소화 기능 개선 허창원 2006-11-18 25896
87 [강좌:33] 컨트롤 배열 처리하기 [5] 허창원 2006-09-28 37563
86 [강좌:32] 시리얼포트의 콜백함수를 만들어 이용하기 [2] 허창원 2006-08-25 33894
85 [강좌:31] 한글 IME, 위치로~~(강력추천) 허창원 2006-06-30 17792
84 [요약] [강좌:31] 한글 IME, 위치로~~(강력추천) [2] 허창원 2006-06-30 19811
83 [강좌:30] Panel을 마우스로 드래그하기(강좌29 업그레이드 버전) file 허창원 2006-06-29 12896
82 [요약] [강좌:30] Panel을 마우스로 드래그하기(강좌29 업그레이드 버전) 허창원 2006-06-29 15022
81 [강좌:29] 타이틀바 없는 Panel을 마우스로 드래그하기 [2] 허창원 2006-06-03 16932
80 [요약] [강좌:29] 타이틀바 없는 Panel을 마우스로 드래그하기 허창원 2006-06-03 15992
79 [팁:14] 프로그램 제거 단축아이콘 넣기(1차수정) [4] 허창원 2006-04-26 15297
78 [메모] 강좌의 종류를 분류해봅니다 [5] 허창원 2006-03-30 21274
77 [팁:13] 디버그 종료시에 뜨는 메시지 A non-debuggable thread... 방지 file [2] 허창원 2005-12-21 26576