Есть ли у кого-нибудь опыт портирования приложения D2007 + TntControls на D2009?

StackOverflow https://stackoverflow.com/questions/393641

Вопрос

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

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

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

Есть ли у вас опыт и/или предложения по переносу такого проекта на Delphi 2009.Целесообразно ли сначала перейти на (коммерческий) TMS Управление Юникодом?

Это было полезно?

Решение

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

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

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

Если вы решите заменить компоненты TNT на собственные компоненты VCL, вы можете использовать команду GExperts «Заменить компоненты» — или, может быть, проще, выполнить поиск и заменить в ваших файлах .DFM и .PAS (которые у вас ДЕЙСТВИТЕЛЬНО есть в текстовой форме, не так ли) заменить ТТНТ на Т.

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top