문제

Delphi 2007과 함께 작성된 다소 큰 (프리웨어) 프로젝트가 있습니다. TntUnicodeControls 그리고 TntLXControls 도서관과 저는 Delphi 2009로 이사 할 계획입니다.

불행히도 저는 프로젝트의 모든 곳에서 해당 라이브러리를 사용하고 있습니다.

  • 유니 코드 기능을 제공하기 위해 VCL 컨트롤을 대체합니다
  • Win32 API 래퍼 (주로 문자열 비교)
  • 기능 향상 TntLXForms, TntLXRegistry, ...
  • 사용하는 타사 구성 요소 TntControls. (VirtualTrees, SPTBXLIB, D2009의 업데이트를 사용할 수 있습니다)

그러한 프로젝트를 Delphi 2009로 포팅하는 경험 및/또는 제안이 있습니까? 먼저 (상업)로 전환하는 것이 좋습니다. TMS 유니 코드 제어?

도움이 되었습니까?

해결책

2007 년부터 2009 년까지 TNT를 사용하는 C ++ Builder 애플리케이션을 포팅 하므로이 중 일부를 도울 수 있습니다. D2009의 유니 코드로의 전환은 기한이 지났고 환영받습니다. 그러나 과거에 유니 코드가 필요하지 않은 사람들에게는 전환이 더 쉬우 며 아마도 그렇지 않을 것입니다. 나처럼, 당신이 유니 코드가 필요하고 그것을 제공하기 위해 Troy Wolbrink의 훌륭한 TNT 컨트롤을 사용했다면, 당신은 다소 복잡한 직업이 있습니다 ...

좋은 소식은 TNTControls의 새로운 버전이 있다는 것입니다. TMS 소프트웨어 D2009를 지원합니다. 나는 이것을 보지 못했지만, 이는 이식성을 완화하기 위해 기본 VCL 구성 요소의 '정면'층일 뿐이라고 기대합니다. 다른 라이브러리를 사용하여 재건 할 수 있다면 고려할 것입니다.

그러나 기본 VCL 컨트롤로 돌아가는 것이 더 나을 수 있으며 그 이유는 문자열 유형입니다. TNT Control은 항상 wideString을 사용하여 유니 코드 문자열을 앞뒤로 전달했으며 자신의 코드를 통해 넓은 사용을 흩어 질 수 있습니다. 이것은 작동하지만, widestring은 com bstr 유형을 '랩'하므로 Com Interop에 사용해야하기 때문에 이상적이지 않습니다. D2009의 기본 유니 코드 스트링은 참조 계산이며 상당히 빠르야합니다.

TNT 구성 요소를 기본 VCL 구성 요소로 교체하기로 결정한 경우 Gexperts "Cloping Congrants"명령을 사용할 수 있습니다. TTNT를 T로 교체하려면

다른 팁

gexperts를 설치하십시오. TTNTXXX를 TXXXX 컨트롤로 변환하는 데 도움이되는 "구성 요소 교체"IDE ADDIN이 있습니다. 한 번 시도하고 괜찮은 경우 "프로젝트의 Evrywhere를 교체하십시오"를 확인하십시오.

SPTBX 및 VirtualTree는 다시 컴파일 될 수 있습니다. 둘 다 D2009를 지원합니다.

Unicode API-S를 호출하기 위해 Winapi 래퍼를 사용한 경우 D2009에서도 작동해야합니다.

이로 인해 TNTLX 컨트롤 (TNTLXForms, TntlxRegistry, ...)이 있습니다. 그들이 지원되지 않기 때문에 어쨌든 그들을 바꾸는 것이 좋은 시간 일 수 있습니다.

다음 리소스를 권장합니다.

Marco Cantu 's Delphi 2009 핸드북 3 장 (유니 코드 포팅)http://www.marcocantu.com/dh2009/

Nick Hodges의 기사 (유니 코드 세계의 델파이)http://blogs.codegear.com/nickhodges/2008/11/20/39149

어느 쪽이든 그것은 많은 일이 될 것이라고 생각합니다. 아마도 당신이 그것을 전에 유니 코드 호환을 만들기 위해 모든 작업을 수행하지 않은 것보다 더 많을 것입니다. 나는 개인적으로 TMS 유니 코드 컨트롤을 잊어 버리고 VCL로 돌아갑니다. 미래에 더 많은 고통을 저장할 것입니다. (그 통제에 반대하는 것은 없습니다.)

또한 D2009의 문자열은 의심 할 여지없이 앱에서 사용했던 D2007의 광범위한 것과 동일하지 않다는 것을 기억하십시오. 따라서 문자열에서 부지런히 바뀌었던 모든 wideString의 인스턴스는 다시 문자열로 돌아 가야합니다 (이제 유니 코드 스트링).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top