|
<< Нажмите, чтобы показать Содержание >> Новое в версии 11 |
Главная особенность этого обновления – совместимость с Delphi и C++Builder 2009.
Обновления: после ТРВ-Редактора версии 18, большая часть информации в этом разделе устарела. Текст больше не сохраняется как ANSI/«сырой Юникод», он сохраняется только как Юникод (Unicode).
Новые типы строк
В файле RVTypes.pas объявлены новые строковые типы: TRVAnsiString, TRVUnicodeString, TRVRawByteString. Эти строковые типы используются вместо String и WideString во многих методах, свойствах и событиях.
TRVAnsiString используется для параметров и переменных, содержащих строки ANSI.
TRVUnicodeString используется для параметров и переменных, содержащих юникодные строки.
TRVRawByteString используется для параметров и переменных, содержащих или строки ANSI, или «сырые юникодные строки».
Стандартный тип String используется для параметров и переменных, которые содержат строки ANSI в старых версиях Delphi/C++Builder, и юникодные строки в Delphi/C++Builder 2009+.
Изменённые параметры событий
В следующих событиях тип некоторых параметров был изменен со String на TRVRawByteString: OnDrawStyleText, OnReadHyperlink, OnItemAction, OnSaveItemToFile, OnRVDblClick, OnRVRightClick, OnItemTextEdit. В существующих проектах измените типы параметров в этих событиях вручную.
В событии OnSaveComponentToFile предполагается, что параметр OutStr является строкой ANSI (для версий Delphi/C++Builder до 2009). При сохранении в HTML-файлы UTF-8 он автоматически преобразуется в UTF-8. В предыдущих версиях ТРВ-Редактора программистам в этом случае необходимо было возвращать строку UTF-8.
Удаление (переименование) методов, «не рекомендуемых для юникодных приложений».
В более старых версиях ТРВ-Редактора существовала группа методов, помеченных как «не рекомендуется для приложений, использующих Юникод». В версии ТРВ-Редактора 11 все эти методы были переименованы, к их именам добавлена буква «R». Например, метод GetItemText был переименован в GetItemTextR. Эти методы имеют параметры типа TRVRawByteString. В справочном файле эти методы больше не описываются (вы больше не увидите в этом справочном файле пометку «не рекомендуется для приложений, использующих Юникод»). Вместо этих методов введена новая группа методов: методы, работающие типом String (Юникод для Delphi/C++Builder 2009, ANSI для более старых версий).
Например, GetItemTextA всегда возвращает строку ANSI, GetItemTextW всегда возвращает строку Юникода, а GetItemText возвращает строку ANSI/Юникод в зависимости от версии Delphi. Методы без суффиксов -A и -W можно использовать для создания проектов, переносимых на все версии Delphi.
Список затронутых методов:
▪AddNLTag (и все его версии);
Та же система именования применяется и к методам, которые ранее имели две версии (ANSI и Юникод):
▪CopyText;
Следующие методы поддерживают только String (строки ANSI/Юникод в зависимости от версии Delphi):
▪AddFmt;
▪AddItem;
Удалён следующий метод (только версия -R): AddTextBlockNL.
Эти изменения нарушают работу некоторого существующего низкоуровневого кода, особенно изменения в GetItemText и SetItemText. В частности, в следующих примерах GetItemText/SetItemText необходимо заменить на GetItemTextR/SetItemTextR:
▪преобразование в Юникод и из Юникода (ConvertToUnicode);
▪удаление форматирования текста.
В новых версиях Delphi/C++Builder тип String по умолчанию является юникодным.
Многие свойства и параметры в TRichView становятся юникодными в Delphi/C++Builder 2009:
▪строки тегов (в режиме теги-это-PChar);
▪дополнительные свойства элементов документа;
▪названия закладок;
▪видимый текст в текстовых метках, нумерованных последовательностях, концевых сносках, сносках;
▪текст маркеров списка (не только в значках, но и в нумерации списков);
▪программный интерфейс фоновой проверки орфографии;
▪цели гипертекста (OnReadHyperlink, OnWriteHyperlink);
▪и другие.
Значения по умолчанию (начальные значения) следующих свойств изменены в Delphi/C++Builder 2009:
▪свойство Unicode стиля текста (с False на True);
▪TRichView.RTFReadProperties.UnicodeMode (c rvruNoUnicode на rvruOnlyUnicode);
▪TRichView.Options (rvoAutoCopyUnicodeText включено, rvoAutoCopyText убрано).
При сохранении стилей текста (в RVF-файлах или формах Delphi) в более старых версиях Delphi/C++Builder сохраняется только нестандартное значение (True) свойства Unicode стиля текста. При сохранении стилей текста (в RVF-файлах или формах Delphi) в Delphi/C++Builder 2009 значение свойства Unicode сохраняется всегда, независимо от того, является ли оно стандартным или нет. Основное следствие следующее: при загрузке форм/RVF-файлов со стилями, сохранёнными в более старых версиях Delphi/C++Builder, в Delphi/C++Builder 2009 и более поздних версиях свойство Unicode всех стилей текста становится True. Для RVF-файлов весь текст в текстовых элементах автоматически преобразуется в Юникод.
Параметры события типа TRVRawByteString (OnDrawStyleText, OnReadHyperlink, OnItemAction, OnSaveItemToFile, OnRVDblClick, OnRVRightClick, OnItemTextEdit) нужно преобразовать в String перед использованием. Например, для события OnRVDblClick:
// Пример для Delphi 2009 и новее!!!
procedure TForm1.RichView1RVDblClick(Sender: TCustomRichView;
ClickedWord: TRVRawByteString; Style: Integer);
var s: String;
begin
if (Style>=0) and Sender.Style.TextStyles[Style].Unicode then
// преобразование "сырого Юникода" в UnicodeString
s := RVU_RawUnicodeToWideString(ClickedWord)
else
// преобразование ANSI в UnicodeString
s := RVU_RawUnicodeToWideString( /
RVU_AnsiToUnicode(Sender.RVData.GetStyleCodePage(Style),
ClickedWord));
Panel1.Caption := s;
end;
Новое событие TCustomRichView.OnAddStyle.
Новое свойство NoVScroll для TRichView.
Новые варианты межстрокового интервала ("минимум" и "точно").
RTF:
Новая опция для сохранения колонтитулов в RTF: включите rvrtfSaveHeaderFooter в RTFOptions.
Новые свойства для RTFReadProperties: CharsetForUnicode и UseCharsetForUnicode.
RVF:
Приложения, скомпилированные в Delphi/C++Builder 2009, сохраняют версию RVF 1.3.1, приложения, скомпилированные в более старых версиях Delphi, сохраняют версию RVF 1.3 (предыдущую версию RVF). Версия RVF 1.3.1 хранит многие строки (имена закладок, DocProperties, теги и другие) в кодировке UTF-8.
Специальная поддержка неразрывных дефисов в юникодном тексте, улучшенный алгоритм расчёта ширины таблиц, копирование выделенных ячеек таблицы в виде текста (в дополнение к RVF), выделение нескольких ячеек с помощью клавиатуры.