4-2 마우스 (Mouse) 마우스이벤트 Click 이벤트 마우스버튼이눌렸다가떼어질때발생 DblClick 이벤트 마우스버튼이두번눌렸다가떼어질때발생 MouseDown 이벤트 마우스버튼이눌렸을때발생 MouseUp 이벤트 마우스버튼이떼어질때발생 MouseMove 이벤트 마우스가움직일때발생 DragOver 이벤트 마우스버튼을누른상태에서끌기를했을때발생 DragDrop 이벤트 마우스끌기를하고누른버튼을놓았을때발생
4-2 마우스 (Mouse) 마우스관련메소드 Line 메소드 객체.Line [Step] (x1, y1) [Step] (x2, y2), [color], [B][F] 한객체위에선이나사각형을그린다. (x1, y1) 은시작점을의미하며, (x2, y2) 는종료점을의미하는데종료점 -(x2, y2) 만기술하면시작점은 CurrentX 와 CurrentY 가된다. CurrentX 와 CurrentY 는먼저그려진선의종료점을가리킨다. 처음사용하는선인데 (x2, y2) 만기술하게되면 CurrentX 와 CurrentY 의값은 (0, 0) 이된다.
4-2 마우스 (Mouse) 마우스관련메소드 Move 메소드 객체.Move left, top, width, height 한객체를특정위치까지이동시킴 left 와 top 은객체의위치를나타냄 width 와 heiht 는객체의크기를나타냄 객체를끌어다놓기를할때유용하게사용 Drag 메소드 객체.Drag 동작값 Line, Menu, Shape, Timer, CommonDialog 컨트롤을제외한컨트롤들의끌어놓기작업을시작하고, 끝내고, 취소시키는작업을함 동작값으로는끌어놓기작업을취소하는 vbcancel 인 0 값과끌어놓기를시작하는 vbbegindrag 인 1 값그리고끌어놓기를끝내는 vbenddrag 인 2 값을갖음 단, Drag 메소드를사용할때는사용하려는컨트롤의 DragMode 속성이 0 - 수동 으로되어있어야함
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-2 마우스를이용하여화면에일반적인선을그려봄
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-2 선그리기예제 1 프로그램은폼위에서마우스버튼을누를때마다즉, MouseDown 이벤트가발생했을때눌린위치까지선을그리는동작을한다. 이프로그램에쓰인컨트롤은폼자체밖에없으며, 그폼에설정된속성과코드는다음과같다. frmline1 의속성 속성 (Name) 속성값 frmline1 Caption 선그리기예제 1
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-2 마우스버튼이눌렸을때실행되는코드 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y Single) Line -(X, Y) 'Line (CurrentX, CurrentY)-(X, Y) 와동일 End Sub As 이제프로그램을작동시켜보자잘작동하는가? 프로그램오른쪽상단의최소화버튼을눌렀다가다시활성화시켜보자. 지금까지그렸던선들이없어진것을확인할수있다. 이는프로그램이최소화되면서선들이가지고있던메모리를 Windows 운영체제에게반납해버리고되돌려받지못하기때문이다. 해결하기위해서는프로그램자신만의화면메모리영역을필요로하는데, 비주얼베이직에서는이를간단히해결할수있다. 폼의 AutoReDraw 속성을 True 로만들어준다.
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-3 마우스를자연스럽게이용하여선을나타내어봄
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-3 선그리기예제 2 프로그램은 선그리기예제 1 프로그램과는달리마우스가움직일때선을그린다. 좀더분석하면마우스의버튼이눌린상태에서움직일때선을그리고마우스의버튼을놓으면선을그리지않는다. frmline2 의속성 속성 (Name) 속성값 frmline2 Caption 선그리기예제 2 AutoReDraw True
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-3 마우스버튼이눌렸을때실행되는코드 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y Single) DrawNow = True ' 마우스버튼이눌리면 True로설정 As ' 현재의마우스위치를기억 CurrentX = X CurrentY = Y End Sub 마우스버튼이움직일때실행되는코드 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y Single) If DrawNow Then ' 마우스버튼이눌렸는지체크 As ' 기억된위치부터선과원을그림 Line -(X, Y) Circle (X, Y), 50 End If End Sub
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-3 마우스버튼이떼어질때실행되는코드 Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) DrawNow = False ' 마우스버튼이놓이면 False로설정 End Sub 폼의일반선언부에선언될변수 Dim DrawNow As Boolean ' 마우스의상태를기억하는전역 (Public) 변수선언
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-4 사용자가마우스를폼위의아이콘을끌어다놓았을때그위치로아이콘이이동하는동작을나타내는프로그램을작성
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-4 Drag & Drop 예제에사용된컨트롤
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-4 속성표 컨트롤이름컨트롤종류사용된속성 frmdrag imgdrag 폼 이미지 (Name) = frmdrag Caption = Drag & Drop 예제 (Name) = imgdrag DragMode = 1 - 자동 Picture = Drag1pg.ico 폼위의아이콘을마우스로끌어다놓았을때실행되는코드 Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X, Y 'Source 는현재이벤트에사용중인컨트롤이름 'Source 즉, imgdrag객체를 DragDrop된위치에이동 End Sub
4-2 마우스 (Mouse) 마우스관련메소드 실습 4-4 이프로그램은드래그시키려는객체의 DragMode 속성을 1 - 자동 으로설정해야한다. 만일 DragMode 속성을 0 - 수동 으로설정하면이프로그램은제대로동작하지않는다. 이때는 Drag 메소드를이용해코딩하여야한다. imgdrag 컨트롤의 DragMode 속성이 0 - 수동 으로설정되어있을경우다음의코드를 imgdrag 컨트롤의 MouseDown 이벤트에추가시킨다. Private Sub imgdrag_mousedown(button As Integer, Shift As Integer, X As Single, Y As Single) imgdrag.drag 'imgdrag 컨트롤위에서마우스버튼을눌렀을경우 _ 드래그를시작 End Sub
지금까지는하나의폼에서만프로그램을작성 SDI (Single Document Interface) 형태의프로그램이었다. SDI 란하나의문서를가지는형태를말한다. MDI 의의미 여러개의폼을포함하는형태
메뉴를포함하는문서편집기프로그램 실습 4-5 실습 4-2, 4-3, 4-4 의예제를 MDI 형태로묶어서별도의메뉴프로그램을작성
MDI 폼추가 MDI 폼추가하기위한순서 먼저각폼을실행시키는폼즉, MDI 형태의폼을만들어야한다. 프로젝트 메뉴에서 MDI 폼추가 항목을선택
MDI 폼추가 MDI 폼추가하기위한순서 MDI 폼추가 항목을선택하면다음의대화상자가나타나는데 열기 를선택한다.
MDI 폼추가 MDI 폼추가하기위한순서 이제 MDI 형태의폼이만들어지며, 프로젝트윈도우에서확인가능
MDI 폼추가 마우스처리프로그램 의컨트롤과속성지정 폼 frmmdi 의속성 속성이름 (Name) Caption 속성값 frmmdi 마우스처리프로그램
MDI 폼추가 마우스처리프로그램 의컨트롤과속성지정 메뉴에디트컨트롤의속성 메뉴에 & 문자를표현하려면 & 문자앞에똑같이 & 를연속해서지정해야한다. 이유는 & 문자가메타문자이기때문이다.
SDI 폼추가 별도의 SDI 폼을추가하기위한순서 MDI 폼과마찬가지로 프로젝트 메뉴에서선택하지만 폼추가 항목을선택해야한다. 마찬가지로대화상자가나타나는데다음과같다.
SDI 폼추가 별도의 SDI 폼을추가하기위한순서 여기서 열기 를선택해서폼을작성할수도있지만이미예제프로그램들을작성했으므로대화상자에서왼쪽상단의 기존파일 탭을선택하고나면다음의대화상자로변한다.
SDI 폼추가 별도의 SDI 폼을추가하기위한순서 여기서추가할폼파일을선택 선택할폼파일은 frmdrag.frm, frmline1.frm, frmline2.frm 들로구성되어있으며같은방법으로세개의폼을추가하고이를프로젝트윈도우에서확인 메인으로실행할폼을선택해주어야하는데 프로젝트 메뉴에서 속성 항목을선택해서설정
SDI 폼추가 별도의 SDI 폼을추가하기위한순서 Project1 속성 항목을선택하면다음의대화상자를볼수있는데 시작개체 란콤보박스에서 frmmdi 를선택
SDI 폼추가 별도의 SDI 폼을추가하기위한순서 마우스처리 프로그램실행화면을보면각예제프로그램들이 MDI 폼안에서만움직인다. 다른말로표현하면폼 frmmdi 는부모윈도우이고각예제폼들은자식윈도우들이다. 부모윈도우가자식윈도우를생성하고자식윈도우는부모윈도우안에서작동하는것이다. 이렇게작동을하게하려면각예제폼들을자식윈도우로설정해야하는데그방법으로는다음과같이자식으로생성될폼들의속성을변경한다.
코드프로시저작성 파일 메뉴에서 선그리기 1 항목을선택했을때 Private Sub mnuline1_click() frmline1.show ' 폼 frmline1을보여줌 End Sub
코드프로시저작성 파일 메뉴에서 선그리기 2 항목을선택했을때 Private Sub mnuline2_click() frmline2.show ' 폼 frmline2를보여줌 End Sub
코드프로시저작성 파일 메뉴에서 Drag & Drop 항목을선택했을때 Private Sub mnudrag_click() frmdrag.show ' 폼 frmdrag를보여줌 End Sub