Новое в версии 11

<< Нажмите, чтобы показать Содержание >>

Новое в версии 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 (и все его версии);

GetWordAt;

GetItemText;

SetItemText;

GetCurrentItemText;

SetItemTextEd;

SetCurrentItemText.

Та же система именования применяется и к методам, которые ранее имели две версии (ANSI и Юникод):

CopyText;

GetSelText;

InsertStringTag;

InsertText;

PasteText;

SearchText.

Следующие методы поддерживают только String (строки ANSI/Юникод в зависимости от версии Delphi):

AddFmt;

AddItem;

InsertItem;

GetTextInfo;

GetCurrentTextInfo.

Удалён следующий метод (только версия -R): AddTextBlockNL.

Эти изменения нарушают работу некоторого существующего низкоуровневого кода, особенно изменения в GetItemText и SetItemText. В частности, в следующих примерах GetItemText/SetItemText необходимо заменить на GetItemTextR/SetItemTextR:

преобразование в Юникод и из Юникода (ConvertToUnicode);

удаление форматирования текста.

Delphi и C++Builder 2009

В новых версиях 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>=0and 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), выделение нескольких ячеек с помощью клавиатуры.