Можно ли программно определить диапазон как ContentControl в Word с помощью Delphi?
У нас есть ряд шаблонов, в которые вставляется шаблонный текст в зависимости от выбора, который пользователь делает в приложении Delphi. Этот выбор также может привести к удалению диапазонов закладок.
Наш код для обновления или удаления диапазона закладок выглядит следующим образом:
var
R: WordRange;
bookmark: OleVariant;
...
bookmark := 'bookmarkName';
R := MainFOrm.WordDoc.Bookmarks.Item(bookmark).Range;
if (addText = true) begin
R.Text := 'This is the text to insert';
R.HighlightColorIndex := wdTurquoise;
end else begin
R.Delete(EmptyParam, EmptyParam);
end;
...
В идеале в приведенном выше примере мы бы определили диапазон как элементы управления расширенным текстовым содержимым, отображающие текст по умолчанию.
Это будет чередоваться с другими закладками, как указано выше.
В качестве альтернативы мы могли бы определить Rich Text Controls в шаблоне и обновить их содержимое/удалить их по мере необходимости?
В следующем примере закладка в шаблоне Word заменяется элементом управления форматированным текстовым содержимым, отображающим необходимый текст-заполнитель.
var
bookmark: OleVariant;
newCC: ContentControl;
ccBlock: BuildingBlock;
ccRange: WordRange;
R: WordRange;
begin
bookmark := 'bookmarkName';
R := MainForm.WordDoc.Bookmarks.Item(bookmark).Range;
// Clear any text in the template
R.Text := '';
// Create the new control
newCC := MainForm.WordDoc.ContentControls.Add(wdContentControlRichText, R);
// ccBlock and ccRange are optional but won't accept EmptyParam
newCC.SetPlaceholderText(ccBlock, ccRange, Trim(Memo2.Text));
// We can reuse ccRange to highlight the placeholder text. Defining earlier breaks setPlaceHolder
ccRange := newCC.Range;
ccRange.HighlightColorIndex := wdYellow;
end;