2009-12-11 12 views
23

Sono confuso su cosa implementa la funzionalità di copia e incolla. Questo è esattamente ciò di cui sono confuso:Come funziona la copia incolla del testo formattato?

Quando copio testo formattato da MS Word (che utilizza un linguaggio di marcatura diverso da HTML) e lo incollo in un editor RTF in un browser Web come gmail o http://www.freerichtexteditor.com/index.php?inc=demo/index la formattazione viene mantenuta ma ora il markup è convertito in HTML. Come è successo? Cosa si è preso cura della conversione?

E se avessi incollato questo testo in qualche altra applicazione, verrà convertito in quel formato. Se ho copiato una pagina html e l'ho incollata in una parola, ci sarà una conversione di markup da HTML a word. Di nuovo, come?

Quindi se si incolla questo testo formattato copiato in un editor di testo come Blocco note, tutta la formattazione viene persa e il markup viene rimosso. Quale applicazione ha rimosso il markup e convertito in testo normale?

Quando copio testo formattato, cosa viene copiato esattamente negli appunti? Sono un programmatore .NET C#. Come potrei programmare questo?

risposta

7

I dati sulla clipboard è esteso con i record FORMATETC:

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

Il record FORMATETC contiene come primo campo un membro cfFormat che descrive il formato di file. cfFormat può essere un valore predefinito come CF_UNICODETEXT o CF_BITMAP o un tipo definito dall'applicazione definito da ad es. Microsoft Word.

In .NET è possibile a quanto pare tua ricerca dell'oggetto Clipboard per scoprire quali formati dati in esso contenuti:

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

Il metodo che si sta cercando è Clipboard.SetData:

Se lo fai non conoscere il formato dell'applicazione di destinazione, è possibile memorizzare i dati in più formati utilizzando questo metodo.

I dati memorizzati con questo metodo possono essere convertiti in un formato compatibile quando viene recuperato.

per recuperare i dati dagli Appunti in un formato particolare, in primo luogo utilizzare il metodo ContainsData per determinare se gli Appunti contengono dati in questo formato prima di recuperare con il metodo GetData

Quanto alla tua domanda concreta come funziona in Word, i link sopra dovrebbero darti abbastanza informazioni per scrivere da solo un piccolo visualizzatore di appunti. Poiché Microsoft Word è in grado di emettere file HTML, suppongo che Word scriva i dati negli Appunti come testo semplice, HTML, RTF e in formato Word.

3

Ci sono alcuni visualizzatori di appunti (clipbrd.exe in win xp per esempio) che è possibile utilizzare per vedere quali dati sono archiviati negli Appunti, questo comportamento è dovuto al fatto che l'applicazione di origine o destinazione (che si trova esattamente nel visualizzatore di appunti) è supportata quel tipo di dati e convertiti in modo appropriato.

+0

qualcosa del genere per Windows 7? – claws

+0

clip.exe sta sostituendo clipbrd.exe in Windows 7 –

+0

clip.exe è un'utilità della riga di comando. Il suo scopo non è quello di visualizzare ma inviare qualcosa agli appunti dalla linea di comando. come dir | clip; clip claws

6

Due cose accadono per fare questo lavoro. Per prima cosa, le applicazioni di origine copiano i dati negli Appunti in più formati, se possibile. Ad esempio, potrebbe fornire HTML, RTF, DOC e formati di testo normale. In secondo luogo, l'applicazione di destinazione viene scritta per poter incollare da più formati, se possibile. Ad esempio, potrebbe prima cercare RTF e, se non è disponibile, può incollare il testo normale e se nessuno dei due è disponibile, non può assolutamente incollare.

È da un po 'che non uso le funzioni degli Appunti ma, se ricordo bene, è possibile che l'applicazione di origine indichi quali formati può fornire senza eseguire effettivamente la conversione completa e il trasferimento dei dati negli Appunti. La conversione effettiva viene eseguita solo quando alcune altre applicazioni richiedono effettivamente i dati dagli Appunti in un formato specifico.

Problemi correlati