개요
이곳에서는 Delphi 를 이용한 GOM을 사용하는 방법을 알아 봅니다. Delphi Client는 내부 DAX 아키텍처를 구현하여 GOM 을 사용하는데 있어 VB와 같이 손쉽고 C++과 같은 저레벨 접근이 가능합니다.
Delphi GOM 프로그래밍
Delphi로 GOM 을 사용하는 방법은 크게 두 가지 입니다. tlb 파일을 Import하여 tlb Unit을 생성하여 tlb Unit만을 통한 방법과 tlb파일을 Import하여 Object를 컴포넌트화 하여 컴포넌트 팔레트에 올려 놓고 사용하는 방법 두 가지 입니다. 컴포넌트화 방법은 TButton 컴포넌트 사용하듯이 간단한 방법입니다. 그러나 tlb Unit만을 사용하는 방법은 Object의 프로퍼티와 메소드 접근하는데 있어 컴포넌트 방식과 유사합니다만 GOM 이벤트 수신 시 Event Sink Object를 직접 작성해야 하는 어려움이 있습니다. 이 점 때문에 사용자 여러분께는 컴포넌트화 방법을 추천합니다.

Project>Import TypeLibrary 메뉴를 통하여 tlb 파일을 import 하고 Install을하여 사용자 패키지에 추가 합니다. 그러면 컴포넌트 팔레트에 각 Object들의 컴포넌트가 생성됩니다. 사용하고자 하는 하는 컴포넌트를 폼에 올려 보통의 컴포넌트와 같이 사용 합니다. Object Inspector 에는 Object의 속성은 나타나지 않습니다. 그러나 속성과 메소드는 코드상에서 사용하시면 됩니다. 그러나 이벤트는 Object Inspector 에서 사용하실 수 있습니다.

tlb 내용을 보기 위해서는 Delphi 상에서 'open' 메뉴를 이용하여 P2.tlb 를 엽니다. 화면은 다음과 같습니다.

Delphi 를 이용한 GOM 프로그래밍
GOM의 GxChartData를 사용하는 Delphi 클라이언트를 작성 합니다.

소스 : Delphi GxChartData 샘플
프로젝트 시작
이 예제는 GOM을 이용하여 사용자가 요청한 챠트 데이터를 수신받아 표시하는 Delphi 클라이언트 입니다. Client에는 종목, 단위, 표시단위, 자료수를 설정하여 요청하는 버튼이 있습니다. 그리고 챠트 데이터를 표시하는 리스트와 GOM의 서버 Object의 현황을 보여 주는 리스트로 구성이 됩니다.

요청 버튼은 두 종류 입니다. 하나는 새로운 챠트 데이터를 요청하는 버튼이고 또 하나는 기존의 챠트 데이터에 기존 데이터를 삭제하고 새 챠트 데이터를 요청하는 버튼입니다. 전자는 '새요청'버튼이고 후자는 '재요청'버튼 입니다. '삭제' 버튼은 챠트 데이터를 삭제하고 삭제종료는 챠트 데이터를 삭제와 함께 클라이언트를 종료 합니다.

GOM을 사용하기 위한 Delphi 사용법은 크게 두 가지 입니다. 하나는 tlb 파일을 Unit화 하여 Unit을 참조하여 사용하는 방법이고 또 하나는 컴포넌트화 하여 사용하는 방법입니다. 이벤트 구현 시 컴포넌트화 하여 사용하는 방법이 훨씬 사용하기 용이 하므로 이 예제 에서는 컴포넌트화 방법을 사용 합니다.

우선 Delphi에 GOM 컴포넌트를 만드는 방법을 설명 하겠습니다. 우선 Project메뉴의 'Import Type Library' 메뉴를 선택 합니다. 그러면 아래와 같은 화면이 나타납니다. 'Add' 버튼을 눌러 P2.tlb 파일을 찾아 선택합니다. 그리고 'Install' 버튼을 눌러 컴포넌트를 만듭니다. 컴포넌트 만드는 자세한 방법은 모든 Delphi 서적에 나와 있으므로 이를 참조 합니다. 설치 후 컴포넌트 팔레트에 GOM 컴포넌트가 나타납니다.

프로젝트 작성
ListView, EditBox등을 화면에 배치 합니다.

GxChartData 컴포넌트를 화면에 올려 놓습니다.

폼 Class에 IGxServer, 즉 대표 인터페이스를 선언 합니다.

화면이 시작할 때 대표 인터 페이스를 가져 와야 하므로 FormCreate 이벤트 핸들러에 GetActiveOleObject나 CreateOleObject를 사용하여 대표 인터페이스를 얻습니다. 두 API 를 사용하기 위해서는 'ComObj' Unit을 uses 에 추가 합니다.

'새요청'버튼의 Click 이벤트 핸들러를 작성 합니다. 이 곳에 대표 인터페이스의 하위 IGxChartStore 에 Add 메소드를 호출합니다. 그러면 새로 만들어진 IGxChartData가 리턴이 되는데 이를 IGxChartData의 이벤트를 수신하기 위해 앞서 올려 놓은 GxChartData 컴포넌트에 연결 합니다.

Add 후 리턴된 IGxChartData에 Define 메소드를 호출함으로써 실제 챠트 데이터 요청을 합니다.

그 다음 연결한 GxChartData 컴포넌트의 이벤트를 작성해야 합니다.

GxChartData 컴포넌트를 선택하고 Object Inspector의 Events 탭을 보면 OnDataAdded, OnDataRefresh, OnDataUpdate 가 표시 되어 있는 것을 보실 수 있습니다. 이를 더블클릭하여 이벤트 핸들러 작성에 들어 갑니다. 이제 이 세개의 이벤트를 작성 하겠습니다.


OnDataRefrehed 는 Define시 요청한 챠트 데이터가 GxChartData에 모두 준비가 됐을 때 발생합니다. 챠트 데이터는 IGxChartData 인터페이스 하위의 IGxTerms Collection을 통하여 읽을 수 있습니다. 예제의 OnDataRefreshed 이벤트 핸들러는 IGxChartData의 IGxTerms Collection을 사용하여 데이터를 ListView에 기록하는 작업을 합니다.

OnDataAdded 는 OnDataRefreshed 이벤트 발생 후 실시간 체결을 통해 새로운 챠트 데이터가 추가 되었을 경우 발생 합니다. 예제에서는 OnDataAdded 발생 시 IGxTerms의 마지막 IGxTerm이 새롭게 추가된 인터페이스 이므로 제일 마지막 IGxTerm의 내용은 ListView에 추가하는 작업을 합니다.

OnDataUpdated 는 OnDataAdded 발생 이후 마지막 IGxTerm의 값이 변경되었을 때 발생 합니다. 예제에서는 OnDataUpdated 발생 시 마지막 IGxTerm의 값을 ListView에 마지막 값에 변경시키는 작업을 합니다.

이 세개의 이벤트 타입을 고수의 종합챠트에 비유하면 최초 종합챠트에서 챠트 요청 시 약간의 시간 이후에 과거 시점에서부터 현재까지 그려집니다. 이 사건이 OnDataRefreshed 이벤트이고 시간이 진행되면서 봉이 추가 될 때가 OnDataAdded 이벤트이고 현재가의 변경되면서 봉의 모양이 변하는 사건은 OnDataUpdated 이벤트 입니다.
예제 파일
경고 : 이 예제는 GOM 사용법을 쉽게 익히기 위해 제공 하는 것으로, 이 예제를 거래에 이용 하는 중 에러나 다른 이유로 발생하는 피해는 당사에서 책임을 지지 않습니다.
2004. 05. 18 (주)델타 익스체인지

Delphi 예제
 
GxSymbol 예제 <제작 버전:1.0>
GxSymbol 예제(델파이버전6이상) <제작 버전:1.0>
GxSymbol LastTick 예제 <제작 버전:1.21>
GxSymbol LastTick 예제(델파이버전6이상) <제작 버전:1.21>
GxTrade(GxPosition, GxAccount, GxOrder, GxConfirm, GxFill) 예제 <제작 버전:1.0>
GxTrade(GxPosition, GxAccount, GxOrder, GxConfirm, GxFill) 예제(델파이버전6이상) <제작 버전:1.0>
GxChartData 예제 <제작 버전:1.0>
GxChartData 예제(델파이버전6이상) <제작 버전:1.0>
3개 종목 수신 예제 <제작 버전:1.23>
동적 종목 추가 예제(델파이버전6이상) <제작 버전:1.23>
그릭스 및 그릭스 설정 예제 <제작 버전:1.23>
그릭스 및 그릭스 설정 예제(델파이버전6이상) <제작 버전:1.23>