2009-12-11 21 views
23

Estoy confundido acerca de qué implementa la funcionalidad de copiar y pegar. Esto es exactamente con lo que estoy confundido:¿Cómo funciona Copiar y Pegar de texto formateado?

Cuando copie texto formateado de MS Word (que usa un lenguaje de marcado diferente que HTML) y pego en un editor RTF en un navegador web como gmail o http://www.freerichtexteditor.com/index.php?inc=demo/index se conserva el formato pero ahora el marcado se convierte en HTML. ¿Cómo pasó esto? ¿Qué se ocupó de la conversión?

Y si hubiera pegado este texto en alguna otra aplicación, se convertirá a ese formato. Si copié alguna página html y la pegué en word, entonces habrá una conversión de marcado de HTML a Word. Nuevamente, ¿cómo?

Luego, si pego este texto copiado en un editor de texto como el Bloc de notas, todo el formato se pierde y el marcado se elimina. ¿Qué aplicación eliminó el marcado y lo convirtió en texto sin formato?

Cuando copie texto formateado, ¿qué se copia exactamente en el portapapeles? Soy un programador .NET C#. ¿Cómo programaría esto?

Respuesta

7

Los datos en el portapapeles se amplía con los registros FORMATETC:

http://msdn.microsoft.com/en-us/library/ms682177%28VS.85%29.aspx

El registro FORMATETC contiene como primer campo de un miembro de cfFormat que describe el formato de archivo. cfFormat puede ser un valor predefinido como CF_UNICODETEXT o CF_BITMAP o un tipo definido por la aplicación definido por, p. Ej. Microsoft Word.

En .NET que aparentemente puede consultar el objeto Clipboard para averiguar qué formatos de datos que contiene:

http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

El método que busca es Clipboard.SetData:

Si lo hace desconoce el formato de la aplicación de destino, puede almacenar datos en múltiples formatos con este método.

Los datos almacenados con este método se pueden convertir a un formato compatible cuando se recupera.

para recuperar datos desde el Portapapeles en un formato particular, utilice primero el método ContainsData para determinar si el portapapeles contiene datos en este formato antes de recuperar con el método GetData

cuanto a su pregunta concreta cómo funciona en Word, los enlaces anteriores le brindarán suficiente información para escribir un pequeño visor de portapapeles usted mismo. Como Microsoft Word puede generar archivos HTML, supongo que Word escribe los datos en el portapapeles como texto simple, HTML, RTF y en formato Word.

3

Hay algunos visualizadores del portapapeles (clipbrd.exe en win xp por ejemplo) que puede usar para ver qué datos se almacenan en el portapapeles, este comportamiento se debe a que la aplicación de origen o destino (que se encuentra exactamente en el visor del portapapeles) es compatible ese tipo de datos, y convertido de manera apropiada.

+0

algo así para Windows 7? – claws

+0

clip.exe está reemplazando clipbrd.exe en Windows 7 –

+0

clip.exe es una utilidad de línea de comandos. Su propósito no es ver sino enviar algo al portapapeles desde la línea de comandos. como dir | acortar; clip claws

6

Dos cosas pasan para que esto funcione. Primero, las aplicaciones de origen copian los datos al portapapeles en múltiples formatos si es posible. Por ejemplo, podría proporcionar HTML, RTF, DOC y formatos de texto sin formato. En segundo lugar, la aplicación de destino está escrita para poder pegar desde múltiples formatos si es posible. Por ejemplo, podría buscar primero RTF y, si no está disponible, pegar texto sin formato y, si no está disponible, no podrá pegar en absoluto.

Ha pasado un tiempo desde que utilicé las funciones del portapapeles, pero si recuerdo correctamente, es posible que la aplicación de origen indique qué formatos puede proporcionar sin realizar la conversión completa y la transferencia de datos al portapapeles. La conversión real solo se realiza cuando algunas otras aplicaciones realmente solicitan los datos del portapapeles en un formato específico.

Cuestiones relacionadas