ListView에서 다른 컨트롤로 내용 끌어놓기(Drag & Drop)
/Autoit/AutoIt :: 2009. 3. 15. 13:06
ListView에서 다른 컨트롤로 내용 끌어놓기(Drag & Drop)
원본 보기 by MrCreatoR
원본은 리스트뷰에서 옆에 있는 에디트로 리스트뷰의 내용을 끌어놓는 소스입니다. 굳이 에디트 컨트롤이 아니라 어디에라도 끌어놓기(드래그 드롭, Drag & Drop)를 하면 해당 내용이 에디트 컨트롤에 표시가 되죠.
이걸 조금 더 발전시켜서 정해진 자리에 끌어놓기를 해야만 변화가 생기는 방법을 추가하였습니다.
끌어놓기 할 때 마우스를 놓는 위치와 컨트롤의 위치를 비교하여 컨트롤의 위치에 해당할 때만 값에 변화를 주는 방법입니다.
이걸 여러 컨트롤을 만들고 각각의 위치와 마우스의 위치를 비교하는 내용을 추가하면 아래 소스처럼 됩니다.
사실 더 확실 방법이 있긴 한데, 이 방법이 쉬어서 이걸로 택했습니다.
값을 읽어서 변화를 주는 부분만 바꾼다면, 여러 가지 형태로 응용할 수 있습니다.
포함한 예제는 리스트뷰에 파일 목록이 나오고 목록에서 하나를 선택하여 다른 컨트롤 영역으로 끌어놓기를 하면 리스트뷰 아이템의 값을 컨트롤에 표시해주는 예제입니다.
;~ http://www.autoitscript.com/forum/index.php?showtopic=49459&view=findpost&p=380300 ;~ MrCreatoR #include <GUIConstantsEx.au3> #include <GUIListView.au3> #include <ListviewConstants.au3> #include <WindowsConstants.au3> Opt('MouseCoordMode', 2) Global $GUIControl[13] $hGUI = GUICreate("Drag & Drop Test", 420, 600) $ListView = GUICtrlCreateListView("ListView", 10, 10, 400, 100) _GUICtrlListView_SetColumnWidth(-1, 0, $LVSCW_AUTOSIZE_USEHEADER) Opt('GUICoordMode', 2) $GUIControl[1] = GUICtrlCreateGroup('그룹', -400, 10, 400, 30) $GUIControl[2] = GUICtrlCreateLabel('라벨', -400, 10) $GUIControl[3] = GUICtrlCreateButton('버튼', -400, 10) $GUIControl[4] = GUICtrlCreateCheckbox('체크박스', -400, 10) $GUIControl[5] = GUICtrlCreateRadio('라디오', -400, 10) $GUIControl[6] = GUICtrlCreateCombo('콤보', -400, 10) $GUIControl[7] = GUICtrlCreateInput('인풋', -400, 10) $GUIControl[8] = GUICtrlCreateEdit('에디트', -400, 10, 400, 30, $WS_VSCROLL) $GUIControl[9] = GUICtrlCreateList('리스트박스', -400, 10) $GUIControl[10] = GUICtrlCreateListView('리스트뷰', -400, 10) $GUIControl[11] = GUICtrlCreateProgress(-400, 10) $GUIControl[12] = GUICtrlCreateSlider(-400, 10) For $i = 20 To 100 Step 20 GUICtrlCreateListViewItem($i, $ListView) Next GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $GUI_EVENT_PRIMARYDOWN Local $CurInfo = GUIGetCursorInfo($hGUI) If IsArray($CurInfo) And $CurInfo[4] = $ListView Then Local $SelText = GetSelectedText($ListView) While IsArray($CurInfo) And $CurInfo[2] = 1 $CurInfo = GUIGetCursorInfo($hGUI) Sleep(10) WEnd $Mouse_pos = MouseGetPos() For $i = 1 To UBound($GUIControl) - 1 Local $Return = 0 $pos = ControlGetPos($hGUI, '', $GUIControl[$i]) If $SelText <> "" And IsArray($CurInfo) And $CurInfo[4] <> $ListView And _ $Mouse_pos[0] > $pos[0] And $Mouse_pos[0] < $pos[0] + $pos[2] And _ $Mouse_pos[1] > $pos[1] And $Mouse_pos[1] < $pos[1] + $pos[3] Then _ $Return = 1 GUICtrlSetData($GUIControl[$i], '') If $Return = 1 Then GUICtrlSetData($GUIControl[$i], $SelText) Else GUICtrlSetData($GUIControl[$i], '0') EndIf Next Else EndIf EndSwitch WEnd Func GetSelectedText($ListView) Local $ItemIndexArr = _GUICtrlListView_GetSelectedIndices($ListView, 1) If Not IsArray($ItemIndexArr) Then Return SetError(1, 0, -1) Local $SelText = "", $Ubound = UBound($ItemIndexArr) - 1, $CRLF = @CRLF For $i = 1 To $Ubound If $i = $Ubound Then $CRLF = "" $SelText &= _GUICtrlListView_GetItemText($ListView, $ItemIndexArr[$i], 0) & $CRLF Next Return $SelText EndFunc ;==>GetSelectedText
'Autoit > AutoIt' 카테고리의 다른 글
배열 함수 2가지 (0) | 2009.11.08 |
---|---|
AutoIt에서 Global, Local, Dim 선언의 차이 (0) | 2009.04.16 |
윈도우 업데이트(Windows Update) 자동으로 하기 (2) | 2009.03.12 |
토탈커맨더(Total Commander) 리스터 플러그인용 AutoIt 구문강조 파일 (4) | 2009.02.27 |
탭(TAB)에 배경색 넣기 (0) | 2009.02.24 |
블로그의 글과 그림, 첨부파일의 복제, 재배포를 금지합니다. => 자세히 보기
티스토리 초대장 필요하신 분은 댓글남겨주세요.
give start - 굿네이버스 - 사랑의 열매 - 아름다운재단 - 어린이재단 - 유니세프 | ||
---|---|---|