PROGRAMMING WORKSHOP

COMAddIns | VSTO

VSTO 추가기능화일을 개발할때는 항상 엑셀옵션의 추가기능대화상자를
점검해 보는 것이 좋다



특히 에러가 날때는 이 부분에서 처리하거나 혹은
제어판에서 같은 이름의 소루션이 있다면 제거하는 것을 게을리하지 말아야 한다

또한 이 페이지첨부한 화일을 실행할때
에러가 나면
이전 006을 추가기능 대화상자에서 제거하고 하시는 것이 좋을 것이다

윈도우소루션에서 엑셀을 참조하여 작업을 할때는
엑셀라이브러리를 참조하고, Imports시키고 하였었으나
VSTO에는 자동으로 아래와 같이 참조및 Imports가 되어 있어서
편리하다



Ribbon의 ToggleButton에 그림을 넣어주어야 보기 좋다
그림을 넣어주는 것은 토글버튼의 속성창에서 Image속성의 버튼을 크릭하면
아래의 그림과 같이 대화상자에
Local Resource와 Project Resource두개가 있다



Local Resource로 설정하면 해당 Ribbon을 다른 프로젝트에서
갖여다 사용하면 Image화일이 그대로 딸려서 나타나지만
Project Resource로 설정하면 다른 프로젝트로 옮기면
그림화일은 나타나지 않는다
데이타베이스화일이라던가(mdb)혹은 다른 텍스트화일이라던가
자원이 될 것들은 모두 Local과 Project로 구분한다고 보면 된다
Project Resource로 하면 해당 image화일은 소루션에 내장이 된다
Project Resource로 하도록 하자



그러면 프로젝트속성창의 Resource탭을 열어 보면 삽입한 그림화일이
자원정보에 나타나는 것을 볼수 있다
반대로 소루션에 필요한 모든 이미지 화일이나, 텍스트화일등을
이 자원폴더에 미리 삽입시켜놓고 이것을 선택하여 사용해도 된다
실은 오른쪽의 Resources에 먼저 그림화일이나 아이콘화일이나 필요한 것을
한곳에서 관리하고 각개체에서 이곳의 것을 참조하여 사용하는 것이
원칙이라고 보면 좋을 것이다
너무 편리하게 가는 길을 많이 만들어놓아서 헷갈리는 환경이지만..
자원은 자원탭(Resource)에서 관리한다는 원칙을 지키는 것이 좋을 것이다
Android강좌에서 Res( resource폴더)에 모든 프로젝트에 필요한
문자열정보, 그림화일, 음원화일,비디오 화일등을 저장하고
사용하는 것과 마찬가지 개념이다
또한 메뉴의 아이콘의 경우 Office의 내장된 아이콘을 사용해도 되는데
가장 간단한 방법은
버튼을 선택후 속성창의 Image가 아닌 OfficeImageID 속성에
아래의 그림과 같이 ImageIcon의 ID명을 넣어주면 편리하다
그런데 이 ID는 어디에도 없다..깝깝한 노릇이다
다행히 이 사이트에 가면 모든 오피스아이콘의 ID값이 있으니까
이곳을 보면서 적당한 아이콘의 것의 ID명을 적어주면 된다



아무튼 그림화일을 만들어서 하던, 혹은 이 ID값을 사용하던
옵션이 다양하다, 또한 Resource탭에는 ICON을 추가하면 ICON을
디자인 하는 창이 있어서 이곳에서 아이콘을 직접 디자인하여 사용해도 되고
여기에서는 OffinceImageID값을 사용하도록 한다..
이것 하나만 설명드려도 되는데 잡다하게 복잡했다
이제 UNO_Weekly의 내용을 하나씩 그대로 옮기면서 정리해보도록 하자
아래와 같이 UserControl속의 TabControl의 첫째 TabPage에
컨트롤들을 삽입하자



소루션을 만들때는 계속 정보가 늘어나고 컨트롤이 늘어나다 보면
순간,순간 정리를 잘 하지 않으면 뒤죽박죽이 된다
기본적으로 일반모듈시트를 하나 삽입하여 일반적인 정보를
보관하는 모듈시트로 확보해 두는 것이 좋다
일반모듈시트를 하나 삽입하고 이름을 modMain 이라고 지어주자
그리고 간트챠트를 그리기 위한 크래스모듈을 하나 준비하고 이름을
clsGantt 라고 지어 주자

그리고 첫번째 단추명령으로 아래의 그림과 같이 스케쥴의 기본정보를
입력하는 테이블의 양식은 만드는 작업을 하자



테이블의 필드중에 어떤 필드는 필수입력이고, 어떤 것은 선택적
입력이라는 메시지는 도형으로 잠깐 보여주고 스스로 사라지는 것을
VB.Net의 Timer를 사용해 보자
기능적으로 별 필요는 없지만..
Timer를 사용하는 기회를 갖기 위하여 넣은 것이다
여러분이 만약 Debugging을 할때
Timer는 순간순간 이벤트가 발생할 것이고
만약 Debugging에서 이 절차가 걸린다면 수도 없이 이 프로시져를
통과하는 바보짓을 하여야 한다
VB.Net은 여러가지 프로시져나 크래스등에 속성을 걸어준다
이 속성은 VBA의 속성(Proerty)와는 다른 속성(Attribute)라고 하고
아래와 같이 Tag가 프로시져 앞에 붙여 준다


<System.Diagnostics.DebuggerStepThrough()> _
Private Sub oTimer_Tick(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles oTimer.Tick
	Static iTick As Integer
	iTick += 1
	If iTick > 100 Then
		oTimer.Stop()
		Try
			Me.shtBasicData.Shapes.Item("shp1").Delete()
			Me.shtBasicData.Shapes.Item("shp2").Delete()
		Catch ex As Exception
		End Try
		oTimer = Nothing
	End If
End Sub

이것은 Debugging할때 이 프로시져는 거치지 말고(DebuggerStepThrough)
그냥 통과하라는 표시인 것이다
아마도, COMAddIn에서 COM라이브러리에서 참조할때
메소드나 속성명이 나타나게 하려면 어떤 속성을 붙이는지 보았던
기억이 나실 것이다
그렇게 별도로 프로시져나 크래스등에 지시를 해주는 꼬리표



아래화일을 실행하시고 그림의 토글버튼을 실행하시고
Custom Task Pane의 버튼을 크릭하는 것 까지..

***[LOG-IN]***