Извините, если этот ответ не идеален, но с учетом возраста вопроса и количества интересующихся людей, я подумал, что смогу сделать снимок и, надеюсь, помочь кому-нибудь, если не ОП.
Я не уверен, как VML / Word обрабатывает данные буфера обмена. Если он помещает несколько форматов в буфер обмена Windows, один с нужным HTML, другой с форматом VML, то вам повезло, и это должно сработать. Если нет, то, возможно, вы могли бы использовать это для очистки кода на вставке, по крайней мере.
Вы захотите просмотреть IDocHostUIHandler :: TranslateAccelerator . Вам нужно реализовать IDocHostUIHandler, если вы этого еще не сделали. Вы используете ICustomDoc :: SetUIHandler для его регистрации после загрузки HTML-документа (может быть пустой страницей, если вы его используете).
Внутри TranslateAccelerator вам нужно следить за nCmdID == IDM_PASTE
. Это срабатывает до того, как пользователь вставляет что-то в элемент управления HTML, и вы можете изменить содержимое буфера обмена до того, как произойдет вставка.
Вы можете использовать что-то вроде GetClipboardData (RegisterClipboardFormat ("HTML Format")), чтобы получить формат HTML из буфера обмена. Вы можете использовать SetClipboardData для замены данных буфера обмена.
Для вашего использования, если вы видите, что после копирования из Word существует несколько форматов буфера обмена, вы можете просто удалить один из форматов, который вам не нужен. Таким образом, когда HTML-элемент управления завершит вставку, он будет использовать только нужный вам формат.
У меня есть примеры кода, если это необходимо, но они являются частью большого проекта и используют библиотеку VCL Borland для некоторых частей. Мой код проверяет формат CF_BITMAP в буфере обмена и преобразовывает его в формат HTML, используя вместо этого файл PNG. Таким образом, пользователи, которые вставляют снимок экрана в элемент управления, получают изображение PNG меньшего размера вместо огромного файла BMP. Концепция примерно такая же, как вы хотите.