Кто-нибудь сталкивался с портированием приложения D2007 + TntControls на D2009? - PullRequest
5 голосов
/ 26 декабря 2008

У меня довольно большой (бесплатный) проект, написанный для Delphi 2007, в котором используются библиотеки TntUnicodeControls и TntLXControls, и я планирую перейти на Delphi 2009.

К сожалению, я использую эти библиотеки везде в моем проекте:

  • Замена элементов управления VCL для обеспечения возможности Unicode
  • Оболочки Win32 API (в основном для сравнения строк)
  • Улучшения функций TntLXForms, TntLXRegistry, ...
  • Сторонние компоненты, использующие TntControls. (VirtualTrees, SpTBXLib, доступны обновления для D2009)

Есть ли у вас опыт и / или предложения по переносу такого проекта на Delphi 2009. Желательно ли сначала переключиться на (коммерческий) TMS элементы управления Unicode?

Ответы [ 4 ]

5 голосов
/ 26 декабря 2008

Установить GExperts; есть надстройка «Заменить компонент» IDE, которая может помочь преобразовать TTntXXX в элементы управления TXXXX. Попробуйте на этот раз, и если все в порядке, просто отметьте «Заменить везде в проекте».

SpTbx и VirtualTrees можно только перекомпилировать - они оба поддерживают D2009.

Если вы использовали оболочки WinAPI только для вызова Unicode API, они также должны работать в D2009.

Это оставляет вас с элементами управления TntLX (TntLXForms, TntLXRegistry, ...). Поскольку они не поддерживаются, может быть, самое время изменить их.

4 голосов
/ 26 декабря 2008

Я могу помочь с этим, поскольку я портирую приложение C ++ Builder, использующее TNT с 2007 по 2009 год. Переход на Unicode в D2009 просрочен и приветствуется. Однако, к сожалению, переход, вероятно, будет проще для тех, кто НЕ нуждался в юникоде в прошлом, и, вероятно, все еще не делает этого. Если, как и я, вам нужен Юникод и вы используете для его управления великолепный элемент управления TNT Троя Вольбринка, у вас довольно сложная работа ...

Хорошей новостью является то, что есть новая версия TNTControls от TMS Software , которая поддерживает D2009. Я не смотрел на это, но ожидаю, что это просто «фасадный» слой поверх собственных компонентов VCL, чтобы упростить переносимость. Я бы посчитал, что если ваши другие библиотеки можно будет перестроить, чтобы использовать его.

Однако, возможно, вам лучше вернуться к собственным элементам управления VCL, и причина кроется в строковых типах. Элемент управления TNT всегда использовал WideString для передачи строк Unicode туда и обратно, и вы можете использовать WideString, разбросанные по вашему собственному коду. Это будет работать, но это не идеально, так как WideString действительно следует использовать только для взаимодействия COM, поскольку он «оборачивает» тип COM BSTR. Собственные строки Unicode в D2009 подсчитываются по ссылкам и должны быть значительно быстрее.

Если вы решили заменить компоненты TNT на собственные компоненты VCL, вы можете использовать команду GExperts «Заменить компоненты» - или, возможно, проще выполнить поиск и замену в ваших файлах .DFM и .PAS (которые вы действительно имеете в текстовая форма, не так ли) заменить TTNT на T.

3 голосов
/ 26 декабря 2008

Я рекомендую следующие ресурсы:

Справочник Марко Канту по Delphi 2009, глава 3 (Портирование на юникод) http://www.marcocantu.com/dh2009/

Статьи Ника Ходжеса (Delphi в мире Юникода) http://blogs.codegear.com/nickhodges/2008/11/20/39149

1 голос
/ 26 декабря 2008

Я думаю, что в любом случае это будет много работы. Возможно, даже больше, чем если бы вы не сделали всю работу, чтобы сделать его совместимым с юникодом раньше. Лично я забуду про элементы управления Unicode tms и вернусь к vcl. Это сохранит больше боли в будущем. (ничего против этого контроля, заметьте.)

Также помните, что строка D2009 - это не то же самое, что Widestring D2007, которую вы, несомненно, использовали в своем приложении. Поэтому все экземпляры Widestring, которые вы так старательно изменили со строки (которая была AnsiString), должны снова вернуться к строке (которая теперь уникальна).

...