Скопируйте форматированный текст в клипборд, кроме шрифта - PullRequest
2 голосов
/ 28 ноября 2011

Я пытаюсь программно генерировать и копировать форматированный текст в буфер обмена с целью вставки его в электронное письмо. Единственное форматирование, которое я хочу скопировать, это разрывы строк и жирный текст. Я хочу использовать текущий или стандартный шрифт электронной почты.

Лицензия: XXXXX
Лицензионный ключ: XXXXX

Мои попытки HTML приводят к правильному форматированию в Windows Live Mail, но с собственным выбором шрифта.

Dim Text As String =
    "Version:0.9" & vbCrLf &
    "StartHTML:00000097" & vbCrLf &
    "EndHTML:00000343" & vbCrLf &
    "StartFragment:00000243" & vbCrLf &
    "EndFragment:00000308" & vbCrLf &
    "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">" & vbCrLf &
    "<HTML><HEAD><TITLE>Software License</TITLE></HEAD><BODY>" & vbCrLf &
    "<!--StartFragment -->" & vbCrLf &
    "<P><B>Licensed to:</B> XXXXX<BR /><B>License key:</B> XXXXX</P>" & vbCrLf &
    "<!--EndFragment -->" & vbCrLf &
    "</BODY></HTML>"
Clipboard.SetText(Text, TextDataFormat.Html)

Мои попытки правильно вставить RTF в WordPad, но вставка в Windows Live Mail просто ничего не делает.

Dim Text As String =
    "{\rtf1\ansi " &
    "\b Licensed to:\b0  XXXXX\par " &
    "\b License key:\b0  XXXXX\par " &
    "}"
Clipboard.SetText(Text, TextDataFormat.Rtf)

Кто-нибудь знает решение для копирования ограниченного форматирования в буфер обмена.

1 Ответ

4 голосов
/ 28 ноября 2011

Это действительно зависит от формата (и в некоторых отношениях от приложения). Вы узнали, как это сделать для двух случаев, но должны знать о , почему работает так, как есть:

Когда вы пытаетесь вставить данные из буфера обмена в приложение (скажем, outlook), это приложение сначала запрашивает буфер обмена, чтобы узнать, какие форматы доступны, и выберет доступный формат «лучший» для него (как определено в Outlook). Разработчики). Если нет доступных форматов, которые работают для этого приложения, то оно действует так, как будто в буфере обмена нет данных. Это объясняет, почему WordPad может обрабатывать данные RTF, а живая почта - нет.

То, что вы можете (и должны) делать, - это помещать данные в буфер обмена в нескольких форматах, чтобы другие приложения могли выбирать.

Вместо использования Clipboard.SetText() используйте Clipboard.SetDataObject() и заполните DataObject несколькими форматами

Dim htmlText as String = ''your working html
Dim rtfText as String = ''your working rtf

Dim data As New DataObject()
data.SetText(htmlText, TextDataFormat.Html)
data.SetText(rtfText, TextDataFormat.Rtf)
''and possibly:
data.SetText(plainText, TextDataFormat.Text)


Clipboard.SetDataObject(data)
...