TCustomRichView.OnReadField

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

TCustomRichView.OnReadField

Происходит при чтении полей из файлов RTF или DocX.

type

  // объявлено в модуле RVStyle/fmxRVStyle

  TRVRTFFieldResultAction =
    (rvrtffraInsert, rvrtffraCollectText);
 
  TRVFieldResultData = record
    FieldResultAction: TRVRTFFieldResultAction;
    Item: TObject;
    Text: TRVUnicodeString;
    Tag: TRVTag;
    StyleNo: Integer;
  end;
 
  TRVFieldContext = record
    FirstTime: Boolean;
    ParaNo: Integer;
    FieldResultText: TRVUnicodeString;
  end;

 
type
  TRVReadFieldEvent = procedure (
    Sender: TCustomRichView;
    const FieldCode: TRVUnicodeString; 
    Context: TRVFieldContext;
    DocFormat: TRVLoadFormat; 
    out FieldResult: TRVFieldResultData;
    var DoDefault: Boolean) of object;
 
property OnReadField: TRVReadFieldEvent;

Это событие происходит при чтении полей из файлов RTF или DocX. Оно возникает только для полей, которые не обрабатываются самим TRichView.

Входные параметры:

FieldCode – код поля, включая имя поля RTF/DocX и его параметры

DocFormat – формат загружаемого документа, rvlfRTF или rvlfDocX

Context – дополнительная информация, описывающая текущее состояние чтения RTF/DocX.

DoDefault = True

 

Выходные параметры:

DoDefault если False, TRichView должен выполнить действие, описанное в FieldResult; если True, TRichView должен выполнить обработку по умолчанию (т. е. прочитать результат поля из RTF/DocX и вставить его как обычное содержимое).

FieldResult описывает действие, которое должен выполнить TRichView вместо этого поля; используется только если DoDefault = False.

Вариант 1: вставка элемента в документ

Если вы присвоите FieldResult.FieldResultAction = rvrtffraInsert, содержимое, описанное в FieldResult, должно быть вставлено в TRichView.

Если FieldResult.Item <> nil, это должен быть объект класса, унаследованного от TCustomRVItemInfo. Этот элемент будет вставлен в документ TRichView; в качестве текста элемента будет использоваться FieldResult.Text. Если у этого элемента есть связанный стиль текста (например, у TRVLabelItemInfo есть свойство TextStyleNo), вы можете присвоить rvsDefStyle номеру стиля текста; TRichView заменит это значение номером, представляющим текущие атрибуты текста в RTF/DocX.

Вариант 2: вставка текста в документ

Если вы присвоите FieldResult.FieldResultAction = rvrtffraInsert, содержимое, описанное в FieldResult, должно быть вставлено в TRichView.

Если FieldResult.Item = nil, будет вставлен текст FieldResult.Text. Если FieldResult.StyleNo >= 0, он задаёт стиль текста (номер в коллекции Style.TextStyles). Если FieldResult.StyleNo < 0 (или равно rvsDefStyle), используются текущие атрибуты текста RTF/DocX. FieldResult.Text может быть многострочным, но не может содержать символы табуляции (#9). Если FieldResult.Tag <> '', этому тексту присваивается этот тег.

Вариант 3: накопление текста

Если вы присвоите FieldResult.FieldResultAction значение rvrtffraCollectText, после вызова этого события ничего не будет вставлено. Вместо этого компонент прочитает результат поля, извлекая из него текст. Событие будет вызвано во второй раз для того же поля с Context.FirstTime = False, а собранный текст будет находиться в Context.FieldResultText.

Дополнительная информация в Context

Поля параметра Context:

FirstTime = True, если событие вызывается впервые для данного поля. False, если оно вызывается после сбора текста из результата поля.

FieldResultText – собранный текст, действителен только если FirstTime = False.

ParaNo – номер стиля абзаца (в коллекции Style.ParaStyles), представляющий текущие атрибуты абзаца в файле RTF/DocX. Хотя индекс абзаца будет присвоен вставленному содержимому TRichView, это свойство может быть полезно, если вы назначаете свой собственный стиль текста (FieldResult.StyleNo; или стиль текста, связанный с FieldResult.Item). Зная ParaNo, если используются шаблоны стилей, вы можете назначить стиль текста с соответствующим значением ParaStyleTemplateId.