델파이 2009 버전부터(즉, XE2, XE, 2010, 2009 버전 모두 해당) 액티브X 프로젝트를 생성할 때 구현 방식이 여러 면에서 바뀌었습니다. 이렇게 구현 방식이 변경되면서 여러 버그들이 해결되었는데요.
그런데 델파이 2009에서의 액티브X 구현 변경 내용 중에, 자동 생성되는 xxx_TLB.pas에서 이전에는 있었던 TOLEControl 래퍼 클래스가 없어져서 곤란한 경우가 있습니다. 몇가지 경우에 이 TOLEControl 래퍼 클래스에 코딩을 추가해야 하는 경우가 있기 때문인데요.
이 문제에 대해 엠바카데로에서 해결책을 내놓겠다고 했었는데, 아직 해결이 안되고 있습니다. 대신 QA팀에서 TOLEControl 래퍼 클래스를 생성할 수 있는 workaround를 소개했습니다.
요약하자면, 작업중인 프로젝트를 컴파일해서 생성한 액티브X를 임포트하라는 것입니다. 액티브X를 임포트할 때 다시 xxx_TLB.pas 파일이 생성되죠. 이것은, 델파이 2009 이후 버전에서 새 액티브X를 생성할 때의 xxx_TLB.pas에는 TOLEControl 래퍼가 없어졌지만, 기존의 액티브X를 임포트했을 때의 xxx_TLB.pas에는 이전 버전들과 마찬가지로 TOLEControl 래퍼 구현이 추가되기 때문입니다.
자세한 절차는…
2. 액티브폼 추가 (File -> New -> Other -> Delphi Projects – ActiveX – Active Form)
3. Active Form Wizard 다이얼로그에 액티브X 이름 등 필요한 정보 입력
4. 프로젝트 저장
5. 컴파일 및 액티브X 등록 (Run -> Register ActiveX Server 혹은 ActiveX -> Register Server)
6. 프로젝트 닫기 (File -> Close All)
7. 액티브X 임포트 다이얼로그 띄우기 (Component -> Import Component)
8. VCL for Delphi Win32 선택하고 Next 클릭
9. IMport ActiveX Control 선택하고 Next 클릭
10. 리스트에서 좀전에 등록했던 액티브X를 찾아 선택하고 리스트에서 Next 클릭
11. 액티브X를 VCL로 등록하는 데 대한 기본값을 변경하거나 그대로 두고 Next 클릭
12. Install to a New Package 선택하고 Next 클릭
13. 새 패키지 이름 입력하고 Finish 클릭
less..
이렇게 하면 해당 액티브X에 대한 새로운 xxx_TLB.pas가 생성이 됩니다. 이 xxx_TLB.pas 파일과 이전의 파일과의 차이는 TOLEControl 래퍼 클래스의 존재 여부 뿐입니다. 따라서 임포트할 때 생성되는 xxx_TLB.pas 파일을 원래의 xxx_TLB.pas 파일에 덮어씌우시면 됩니다.
거창하게 썼지만 이건 제가 알아낸 것은 아니고, 버그 리포트 69080에 대해 엠바카데로 QA팀에서 제공한 방법입니다.
http://qc.embarcadero.com/wc/qcmain.aspx?d=69080