2013-08-27 5 views
3

Я пытаюсь перенести DevExpress TdxDBGrid для приложений Unicode, и отсутствие нестандартного Unicode TStringList является единственным препятствием для завершения миграции. Я попытался использовать TAnsiStringList из JcLAnsiString (из проекта с открытым исходным кодом Jedi/Jcl), и, хотя он работает, он включает слишком много зависимостей от структуры Jedi/Jcl. Как правило, мой план заключается в использовании перенесенного TdxDBGrid для работы с данными Unicode, но TAnsiStringList требуется для внутренних действий - например, для хранения закладок, выбранных строк и т. Д.Ansi TStringList в Delphi XE для совместимости с Unicode

Является ли более легким не-Unicode TStringList (с меньшими зависимостями)?

+0

Я не могу понять, что не так с 'TStringList'. Почему бы вам не использовать это? Помимо этого, если у вас есть настоящая необходимость, насколько сложно взять код из 'TStringList' и заменить' string' на 'AnsiString'? Конечно, вы справляетесь с этой задачей. –

+3

Вы уверены, что если вы перенесите свое приложение в Unicode Delphi, то для 'TdxDBGrid' потребуется строковый список' AnsiString'? Я не знаю, почему бы его разработчики это сделали. IMHO ему нужен только абстрактный класс TStrings, а весь компонент - * Unicode ready * и использование строкового списка 'AnsiString' будет даже ошибочным. Но это всего лишь моя догадка (и надеюсь на хороший дизайн этого компонента). – TLama

+0

Единственное приложение для версии ANSI 'TStrings' - это большой объем заведомо ANSI-текста, хранящегося в памяти. – OnTheFly

ответ

1

Не знаете, какую функциональность TStringList вы используете, но вы можете попробовать общий TList<AnsiString> вместо TStringList для своей задачи. Если единственная причина использовать тип AnsiString вместо String, то внутри нее будет содержать некоторые строки, возможно, этого будет достаточно.

+0

Я понимаю этот вопрос, так как 'TdxDBGrid' использует внутренне' TStringList'. Если это так, как бы вы убедили 'TdxDBGrid' использовать' TList 'вместо' TStringList'? Я все еще чувствую, что для такой миграции ничего не нужно делать. – TLama

+0

@TLama: Привет, пытался использовать TAnsiStringList, поэтому он определенно имеет исходный код и там что-то меняет. Если внутренне он используется только как хранение строк, тогда этого будет достаточно, чтобы заменить TStringList на что-то другое. Если он уже изменил его на TAnsiStringList из JEDI, то он может попытаться определить TAnsiStringList = List без JEDI (возможно, ему нужно будет добавить дополнительные методы, но лучше построить его с земли). –

+0

Если этот компонент использует внутренне 'string' как элементарный тип (который был сопоставлен с' AnsiString' на Delphi 2009 ниже и 'UnicodeString' выше), и он использует обычный класс' TStringList' (который имеет такое же внутреннее сопоставление, как 'string' типа), ничего не нужно делать. В таком случае это будет еще хуже, потому что если используется внутренний тип 'string', и вы вынуждаете строковые списки ANSI, вы потеряете Unicode на них. – TLama