5-1 응용컨트롤 (Control) OLE 컨트롤 OLE(Object Linking & Embedding) 의개념 OLE Object Linking & Embedding 의약자로다른프로그램과의통신을제공 객체처럼컴포넌트들간에도데이터의통신을가능하게하여서로다른응용프로그램들끼리정보를공유할수있게하는기술 OM(Component Object Model) 에그뿌리를두고있으며지금의 ActiveX 기술로발전을거듭 기능에따라서버와클라이언트로나뉨 서버 ( 컴포넌트또는객체라부름 ) 란컴포넌트를다른응용프로그램에서사용하도록그컴포넌트를제공하는제공자 클라이언트 ( 컨테이너 (Container) 또는컨트롤러 (Controller)) 란서버가제공하는컴포넌트를사용하는사용자 컴포넌트가클라이언트인컨테이너에게컴포넌트를제공하기위해서는 OLE Automation 이라는기술을사용
5-1 응용컨트롤 (Control) OLE 컨트롤 OLE 문서 DLL DLL 을풀이하자면 Dynamic Link Library 의약자로프로그램이실행중에동적으로연결되어사용할수있는라이브러리함수를의미 OCX OLE Control Extensions 의약자로기존의 16 비트체제로구성된 VBX 에서 32 비트체제로옮겨지면서 OLE 기능이추가되어진새로운컨트롤의규약 OLE 서버의기능을하는 EXE OLE 문서를제공하는기능을 DLL 이나 OCX 의형태로만들지않고실행가능한파일인 EXE 의형태로만듬 Embedding 객체와 Linking 객체의차이점 Embedding 객체는 OLE 문서안에데이터가저장 Linking 객체는 OLE 문서안에데이터가있는위치가저장 이런차이점으로 Embedding 객체를이용하게되면작성하려는 OLE 컨테이너응용프로그램의크기는커지게되며해당데이터는그응용프로그램안에서만편집이가능
5-1 응용컨트롤 (Control) OLE 컨트롤 OLE 컨테이너컨트롤 서버가제공한 OLE 문서를사용하는클라이언트의역할을함 제공된 OLE 문서를 Embedding 객체를이용하여그안에서생성, 편집가능 OLE 문서의위치나크기의조정이가능 아이콘으로표시가능 Linking 객체를이용해 OLE 문서를생성 OLE 문서를생성시키는방법은디자인모드에서생성하는방법과실행모드에서생성하는방법두가지가있음 디자인모드에서 Embedding 객체를이용해서생성 폼위에 OLE 컨테이너컨트롤을배치
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 폼위에 OLE 컨테이너컨트롤이배치되면다음의대화상자가나타남 만일새로운 OLE 문서를생성하려면 새개체만들기 옵션버튼을선택한후 개체유형 리스트박스에서생성하려는 OLE 문서의유형을선택한후확인버튼을누르면됨
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 만일새로운 OLE 문서를생성하지않고파일로부터 OLE 문서를생성하려면즉데이터까지포함한 OLE 문서를제공받으려면 파일로부터만들기 옵션버튼을선택한후확인버튼을누르면된다. 이번엔 개체유형 리스트박스에서 Microsoft PowerPoint 프리젠테이션 을선택해보자.
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 대화상자에서 찾아보기 버튼을클릭하여파일을선택할수있는대화상자가표시되는데이때사용하려는파일을선택
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 파일을선택한후삽입버튼을누르면다시이전의대화상자로돌아온다. 이때확인버튼을누르면다음과같이 OLE 컨테이너컨트롤에 OLE 문서의데이터인파워포인터의프리젠테이션내용이나타나게됨
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 이제프로그램을실행하면아직은아무런작동을하지않지만실행중에마우스로 OLE 컨테이너컨트롤을더블클릭하면파워포인터프리젠테이션같은경우는그내용의프리젠테이션을시작하고비트맵의경우에는실제로그림을편집할수있는메뉴가생성되어보여지게됨 참고로 4 번의순서에서 아이콘으로표시 체크박스에체크를하게되면 OLE 컨테이너컨트롤안에해당응용프로그램의아이콘으로표시되어나타남 아이콘으로표시 체크박스에체크했을때다음과같이대화상자의오른쪽하단이변한모습을볼수있음
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Embedding 객체를이용해서생성 아이콘으로표시 체크박스에체크된결과
5-1 응용컨트롤 (Control) OLE 컨트롤 디자인모드에서 Linking 객체를이용해서생성 Linking 객체의이용방법은 OLE 문서를 Embedding 객체를이용해서 OLE 컨테이너컨트롤에생성하는방법과동일하지만다음의대화상자에서 연결 체크박스에체크하는것만이다름 이방법으로생성된 OLE 문서는연결만되어있는상태이므로원래문서의내용이다른응용프로그램에의해서바뀔수가있음 바뀐내용의문서를보려면 Update 메소드를사용해서문서의내용을갱신해주어야함
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서를생성하려면 OLE 컨테이너컨트롤의속성과메소드를이용해서프로그램을작성해야함 OLE 컨테이너컨트롤의속성과메소드를설명
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 Class 속성을선택했을때에는다음과같이생성할 OLE 문서의유형을선택할수있게함
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 SizeDoc 속성이나 SizeItem 속성을선택하면원문서를선택할수있도록다음의대화상자가나타남
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 CreateEmbed 메소드 Embedding 객체를이용해서 OLE 컨테이너컨트롤에 OLE 문서를생성 객체.CreateEmbed sourcedoc, class CreateLink 메소드 Linking 객체를이용해서 OLE 컨테이너컨트롤에 OLE 문서를생성 객체.CreateLink sourcedoc, sourceitem InsertObjDlg 메소드 프로그램실행시에사용자에게새로운유형의 OLE 문서를생성하게대화상자를표시함 객체.InsertObjDlg
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 PasteSpecialDlg 메소드 프로그램실행시에사용자에게클립보드에복사되어있는 OLE 문서를붙여넣을수있도록대화상자를표시함 객체.PasteSpecialDlg Close 메소드 OLE 컨테어너컨트롤과 OLE 문서의연결을닫음 객체.Close Copy 메소드 OLE 컨테이너컨트롤의 OLE 문서의내용을클립보드에복사함 객체.Copy
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 Delete 메소드 OLE 컨테이너컨트롤의 OLE 문서의내용을지움 DoVerb 메소드 DoVerb 메소드에정의된상수를실행 DoVerb 메소드에정의된상수 객체.Delete 객체.DoVerb 상수 상수값설명 vboleprimary 0 기본적인실행을함 vboleshow -1 OLE 문서를 OLE 컨테이너컨트롤안에서편집하기위해실행을함. 만일이런편집이지원되지않으면원문서의응용프로그램을실행시킴 vboleopen -2 원문서의응용프로그램을실행시킴 vbolehide -3 Embedding 객체에한하여원문서의응용프로그램을숨김 vboleuiactiv ate VbOLEInPlace Activate VbOLEDiscard UndoState -4-5 -6 OLE 문서를 OLE 컨테이너컨트롤안에서편집이가능하면유저인터페이스툴을보여주지만불가능하면에러가발생 원문서의응용프로그램이지원하면 OLE 문서를 OLE 컨테이너컨트롤안에서한번의마우스클릭으로편집이가능해짐 OLE 문서를 OLE 컨테이너컨트롤안에서편집할때원문서의응용프로그램이실행취소할수있게함
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 Drag 메소드 Line, Menu, Shape, Timer 또는 CommonDialog 컨트롤을제외한모든객체를 Drag 함 객체.Drag 상수 Drag 메소드에정의된상수 상수 값 설명 vbcancel 0 Drag를취소 vbbegindrag 1 객체를 Darg하기시작 vbenddrag 2 Darg를마치고객체를 Drop
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 SaveToFile 메소드 OLE 컨테이너컨트롤의 OLE 문서내용을파일로저장 객체.SaveToFile filenumber Update 메소드 원문서의내용을 OLE 컨테이너컨트롤에갱신시킴 객체.Update
5-1 응용컨트롤 (Control) OLE 컨트롤 실행모드에서 OLE 컨테이너컨트롤에 OLE 문서생성 Move 메소드 객체을이동시킴 객체.Move left, top, width, height Paste 메소드 클립보드의 OLE 문서의내용을 OLE 컨테이너컨트롤에복사함 객체.Paste ReadFromFile 메소드 SaveToFile 메소드로생성된파일의데이터를 OLE 컨테이너컨트롤에로드시킴 객체.ReadFromFile filenumber
클립보드는 Windows 시스템에있어서많은오버헤드를요구하지않는간단한메커니즘으로응용프로그램간의데이터교환을지원 지원하는데이터종류는문자열뿐만아니라비트맵, 메타파일또객체의링크정보도포함 클립보드는 Windows 운영체제에서실행되는모든응용프로그램에서공유하는메모리영역으로서응용프로그램에서이용할수있도록객체로존재하지만속성이나이벤트는제공되지않고메소드만을지원
클림보드작동원리
클립보드메소드 Clear 클립보드에저장된데이터를삭제 Clipboard.Clear GetData 클립보드에서그림데이터를가져옴 픽쳐박스 = Clipboard.GetData( [ 포맷상수 ] ) 포맷상수 상수 값 설명 vbcfbitmap 2 비트맵파일 (.bmp) vbcfmetafile 3 메타파일 (.wmf) vbcfdib 8 장치독립비트맵 vbcfpalette 9 팔레트
클립보드메소드 GetFormat 클립보드에저장된데이터의형식을얻음 Boolean = Clipboard.GetFormat( [ 포맷상수 ] ) 포맷상수 상수 값 설명 vbcflink &HBF00 DDE 정보교환 vbcftext 1 텍스트 vbcfbitmap 2 비트맵파일 (.bmp) vbcfmetafile 3 메타파일 (.wmf) vbcfdib 8 장치독립비트맵 vbcfpalette 9 팔레트
클립보드메소드 GetText 클립보드에서문자열데이터를가져옴 Clipboard.SetData 그림데이터, [ 포맷상수 ] 포맷상수 상수 값 설명 vbcfbitmap 2 비트맵파일 (.bmp) vbcfmetafile 3 메타파일 (.wmf) vbcfdib 8 장치독립비트맵 vbcfpalette 9 팔레트
클립보드메소드 SetText 클립보드로문자열데이터를보냄 Clipboard.SetText 문자열데이터, [ 포맷상수 ] 포맷상수 상수 값 설명 vbcflink &HBF00 DDE 정보교환 vbcfrtf &HBF01 Rich Text Format으로 vbcftext 1 문자열데이터를얻음
클립보드메소드 실습 5-5 다음의메뉴를이용해서상단과하단에위치한텍스트창에서클립보드를이용한문자열편집기능을하는프로그램을실습
클립보드메소드 실습 5-5 실행방법
클립보드메소드 실습 5-5 실행방법 문자열을클립보드로복사하려면텍스트창에서문자열을입력하고입력된문자열을선택한후 파일 메뉴에서 복사하기 항목을선택
클립보드메소드 실습 5-5 실행방법 텍스트창에서문자열을입력한후그문자열을선택하고 파일 메뉴의 잘라내기 항목을선택하면문자열이클립보드에복사되면서입력된문자열은텍스트창에서지워짐
클립보드메소드 실습 5-5 실행방법 파일 메뉴의 붙이기 항목을선택하면클립보드에복사된문자열이현재커서위치에복사됨
클립보드메소드 실습 5-5 CLIP BOARD 프로그램에사용된컨트롤
클립보드메소드 실습 5-5 메뉴에디트컨트롤에사용된속성
클립보드메소드 실습 5-5 속성표 컨트롤이름컨트롤종류사용된속성 frmclipboard text1 text2 폼 텍스트박스 (Name) = frmclipboard Caption = CLIP BOARD Text = "" MultiLine = True
클립보드메소드 실습 5-5 코드프로시저작성 파일 메뉴에서 잘라내기 항목을선택했을때 Private Sub mnucut_click() ' 현재활성화되어있는컨트롤의선택된텍스트를클립보드로보냄 Clipboard.SetText ActiveControl.SelText ' 선택된텍스트를지움 ActiveControl.SelText = End Sub 파일 메뉴에서 복사하기 항목을선택했을때 Private Sub mnucopy_click() ' 현재활성화되어있는컨트롤의선택된텍스트를클립보드로보냄 Clipboard.SetText ActiveControl.SelText End Sub
클립보드메소드 실습 5-5 코드프로시저작성 파일 메뉴에서 붙여넣기 항목선택했을때 Private Sub mnupaste_click() ' 클립보드의텍스트내용을현재활성화되어있는컨트롤에보냄 ActiveControl.SelText = Clipboard.GetText() End Sub 파일 메뉴에서 종료 항목을선택했을때 Private Sub mnuexit_click() End End Sub
클립보드메소드 실습 5-6 그림을이용한클립보드예제
클립보드메소드 실습 5-6 컨트롤이름 컨트롤종류 사용된속성 Form1 Form ( 이름 ) = From1 Caption = Picture1 PictureBox ( 이름 ) = Picture1 Caption = Picture2 PictureBox ( 이름 ) = Picture2 Caption = Appearance 0 - 평면 image1 image Stretch True image1 image Stretch True Command1 CommandButton ( 이름 ) = Command1 Caption = 클립보드에복사 Command2 Command3 CommandButton CommandButton ( 이름 ) = Command2 Caption = 클립보드그림컨트롤에복사 ( 이름 ) = Command3 Caption = 종료
클립보드메소드 실습 5-6 기존의실습방법으로새프로젝트를생성 PictureBox 를 Form 에두개추가후다음과같이속성을변경 Picture1:( 이름 ) Picture1 Picture2:( 이름 ) Picture2, Appearance 0 - 평면
클립보드메소드 실습 5-6 명령을수행할 CommandButton 을다음과같이 Form 에추가한후속성을다음과같이변경 Command1:( 이름 ) Command1, Caption 클립보드에복사 Command2:( 이름 ) Command2, Caption 클립보드그림컨트롤에 Command3:( 이름 ) Command3, Caption 종료
클립보드메소드 실습 5-6 그림을화면에나타나게할 Image 컨트롤을 PictureBox 안에추가
클립보드메소드 실습 5-6 프로젝트의코드보기를눌러코딩창에다음과같이 Coding 을한다. ' 그림을클립보드에복사버튼을누르면수행한다. Private Sub Command1_Click() ' 클립보드개체의내용을모두지운다. Clipboard.Clear ' 클립보드개체에이미지컨트롤의내용을넣는다. Clipboard.SetData Image1.Picture End Sub ' 클립보드의그림을컨트롤에복사버튼을누르면수행함. Private Sub Command2_Click() ' 클립보드의내용을이미지 (Image2) 컨트롤에출력함. If Clipboard.GetFormat(2) Then Image2.Picture = Clipboard.GetData() End If End Sub ' 종료버튼을누르면프로그램을종료하는기능. Private Sub Command3_Click() End End Sub
클립보드메소드 실습 5-6 프로젝트의코드보기를눌러코딩창에다음과같이 Coding 을한다. Private Sub Form_Load() ' 폼이모니터화면중심에출력한다. Left = (Screen.Width - Width) / 2 Top = (Screen.Height - Height) / 2 Clipboard.Clear Image1.Picture = LoadPicture("c:\sample\test.bmp") 그림이있는경로지정 End Sub Image1.Picture = LoadPicture( c:\sample\test.bmp ) 에서그림을로딩한장소는임의로지정하였으므로그림을불러올경로는직접지정해준다. 저장후실행한다. 클립보드에복사나 KeyBoard 의 PrintScreen 을눌러클립보드그림컨트롤에복사키를누르게되면해당그림이복사가됨