Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Вставка RTF-текста в RichTextBox (VBA в MS Word)


Автор: kuksha 26.6.2017, 11:09
Есть документ MS Word в тексте которого есть например такое предложение: 

ааа ббб ввв ггг.

Это предложение надо вставить в текстовый RichTextBox в диалоговом окне моего макроса в таком же виде, то есть с сохранением красного, жирного, размера, шрифта и т.д.
Там я его сам как-то обрабатаю и получу например такое:

ааа ккк ччч ггг.

Далее это изменённое предложение надо вставить обратно в документ на место исходного предложения.
Всё.

(найти текст, выделить и скопировать в буфер обмена я умею)

Собственно вопрос: как сделать вставку форматированного текста в элемент RichTextBox? Ну и обратно в текст документа?
Сейчас я делаю это командой VBA:
Код

SendKeys "+{INSERT}", True

но постоянно вылезают неприятности, в которых я даже копаться не хочу - надо сделать это исключительно  средствами VBA. Помогите кто может... 

Автор: Akina 26.6.2017, 11:49
Ну так и вставляйте из буфера обмена в RichTextBox.RTFText...

Автор: kuksha 26.6.2017, 13:04
я вижу свойство .TextRTF у элемента RichTextBox, но что ему присвоить - не могу догнать.
GetText вставляет голый текст, без RTF.
Напишите пример кода.

Автор: Akina 27.6.2017, 09:51
Цитата(kuksha @  26.6.2017,  14:04 Найти цитируемый пост)
что ему присвоить - не могу догнать

Для начала скопируйте из RichTextBox.TextRTF форматированную как надо строку, а потом посмотрите, как оно выглядит, если это рассматривать как plain text:

Код

TextBox1.Text = RichTextBox1.TextRTF

Автор: kuksha 27.6.2017, 12:28
Akina, сделал. Вот что я вижу в TextBox1:
{\rtf1\ansi\ansicpg1251\deff0\nouicompat\deflang1049{\fonttbl{\f0\froman\fprq2\fcharset204{\*\fname Times New Roman;}Times New Roman CYR;}{\f1\fnil\fcharset204 Tahoma;}}
{\colortbl ;\red255\green4\blue5;}
{\*\generator Riched20 14.0.6015.1000;}{\*\mmathPr\mwrapIndent1440}\viewkind4\uc1
\pard\f0\fs24 , \'ea\'ee\'e4 \'ef\'ee\'e4\'f0\'e0\'e7\'e4\'e5\'eb\'e5\'ed\'e8\'ff: 77-11, \'e7\'e0\'f0\'e5\'e3\'e8\'f1\'f2\'f0\'e8\'f0\'ee\'e2\'e0\'ed \'ef\'ee \cf1\'ec\'e5\'f1\'f2\'ee\'ed\'e0\'f5\'ee\'e6\'e4\'e5\'ed\'e8\'fe\cf0 : \'e3.\f1\fs17
\par 
\par }

Что дальше?
Мне надо не из RichTextBox в RichTextBox, а из документа в RichTextBox и обратно.

Автор: kuksha 29.6.2017, 09:38
Нашёл как это делается:
https://msdn.microsoft.com/VBA/Access-VBA/articles/retrieve-information-from-the-clipboard
но поскольку там задано 
CF_TEXT = 1 
, то вставляется голый текст.
А как вставить RTF? В стандартных типах данных клипборда я RTF не вижу...

Автор: Akina 30.6.2017, 10:00
Цитата(kuksha @  29.6.2017,  10:38 Найти цитируемый пост)
как вставить RTF? В стандартных типах данных клипборда я RTF не вижу...

Нет такого типа - вообще! RTF - это обычный текст. Просто в нём есть конструкции, которые интерпретируются при отображении как атрибуты оформления. Так что вставляешь как обычный текст - но в TextRTF.

Автор: kuksha 2.7.2017, 21:47
Помогли на другом форуме, но внешнюю ссылку здесь наверное нельзя давать...
В двух словах - решилось именно перебором содержимого буфера обмена ПО ТИПАМ данных с поиском Rich Text.
Вопрос закрыт.

Автор: Akina 2.7.2017, 22:15
Цитата(kuksha @  2.7.2017,  22:47 Найти цитируемый пост)
внешнюю ссылку здесь наверное нельзя давать...

Можно... даже кнопка есть специальная - "Ссылка", слева вторая сверху.
Цитата(kuksha @  2.7.2017,  22:47 Найти цитируемый пост)
решилось именно перебором содержимого буфера обмена ПО ТИПАМ данных с поиском Rich Text.

Гм... мало того, что формулировочка так себе - так в контексте обсуждения она вообще выглядит как феерический бред. Так что ссылка на "тот" форум совсем не повредит - похоже, решённая задача не очень совпадает с исходно заявленной...

Автор: kuksha 4.7.2017, 08:21
Четвёртое сообщение снизу:
http://www.sql.ru/forum/701613/kak-vstavit-rtf-stroku-s-pomoshhu-vba

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)