Artigo: 274326 - Última revisão: quinta-feira, 24 de Maio de 2007 - Revisão: 5.1

Como adicionar código HTML para a área de transferência utilizando o Visual Basic

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo demonstra como adicionar e obter dados HTML na área de transferência do Microsoft Windows utilizando o Visual Basic.

Mais Informação

Os programadores podem utilizar o formato de área de transferência CF_HTML (formato HTML) para partilhar dados HTML com outras aplicações que compreende HTML, tal como o Microsoft Office e Microsoft Internet Explorer.

CF_HTML totalmente é um formato baseado em texto inclui uma descrição, um contexto e um fragmento dentro nesse contexto. Quando estiver a criar dados para enviar para a área de transferência, tem de incluir uma descrição dos dados para indicar a versão da área de transferência e os desvios de contexto e fragmento. Pode utilizar o procedimento PutHTMLClipboard descrito mais adiante neste artigo para simplificar esta tarefa.

Passos para criar um projecto de exemplo

  1. Inicie um novo projecto EXE padrão no Visual Basic. É criado o Form1 por predefinição.
  2. Adicione dois controlos CommandButton ao Form1. Altere a propriedade legenda Command1 para Colocar HTML e altere a propriedade legenda Command2 para Obter HTML .
  3. No menu projecto , escolha Add Module para adicionar um módulo BAS padrão ao projecto.
  4. Adicione o seguinte código à janela de módulo:
    
    Option Explicit
    
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) _
       As Long
    Private Declare Function GlobalAlloc Lib "kernel32" ( _
    
       ByVal wFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function SetClipboardData Lib "user32" ( _
       ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Private Declare Function RegisterClipboardFormat Lib "user32" Alias _
       "RegisterClipboardFormatA" (ByVal lpString As String) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
       As Long
    Private Declare Function GlobalUnlock Lib "kernel32" ( _
       ByVal hMem As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
       pDest As Any, pSource As Any, ByVal cbLength As Long)
    Private Declare Function GetClipboardData Lib "user32" ( _
       ByVal wFormat As Long) As Long
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" ( _
       ByVal lpData As Long) As Long
    
    Private Const m_sDescription = _
                      "Version:1.0" & vbCrLf & _
                      "StartHTML:aaaaaaaaaa" & vbCrLf & _
                      "EndHTML:bbbbbbbbbb" & vbCrLf & _
                      "StartFragment:cccccccccc" & vbCrLf & _
                      "EndFragment:dddddddddd" & vbCrLf
                      
    Private m_cfHTMLClipFormat As Long
    
    Function RegisterCF() As Long
    
    
       'Register the HTML clipboard format
       If (m_cfHTMLClipFormat = 0) Then
          m_cfHTMLClipFormat = RegisterClipboardFormat("HTML Format")
       End If
       RegisterCF = m_cfHTMLClipFormat
       
    End Function
    
    Public Sub PutHTMLClipboard(sHtmlFragment As String, _
       Optional sContextStart As String = "<HTML><BODY>", _
       Optional sContextEnd As String = "</BODY></HTML>")
       
       Dim sData As String
       
       If RegisterCF = 0 Then Exit Sub
       
       'Add the starting and ending tags for the HTML fragment
       sContextStart = sContextStart & "<!--StartFragment -->"
       sContextEnd = "<!--EndFragment -->" & sContextEnd
       
       'Build the HTML given the description, the fragment and the context.
       'And, replace the offset place holders in the description with values
       'for the offsets of StartHMTL, EndHTML, StartFragment and EndFragment.
       sData = m_sDescription & sContextStart & sHtmlFragment & sContextEnd
       sData = Replace(sData, "aaaaaaaaaa", _
                       Format(Len(m_sDescription), "0000000000"))
       sData = Replace(sData, "bbbbbbbbbb", Format(Len(sData), "0000000000"))
       sData = Replace(sData, "cccccccccc", Format(Len(m_sDescription & _
                       sContextStart), "0000000000"))
       sData = Replace(sData, "dddddddddd", Format(Len(m_sDescription & _
                       sContextStart & sHtmlFragment), "0000000000"))
    
       'Add the HTML code to the clipboard
       If CBool(OpenClipboard(0)) Then
       
          Dim hMemHandle As Long, lpData As Long
          
          hMemHandle = GlobalAlloc(0, Len(sData) + 10)
          
          If CBool(hMemHandle) Then
                   
             lpData = GlobalLock(hMemHandle)
             If lpData <> 0 Then
                
                CopyMemory ByVal lpData, ByVal sData, Len(sData)
                GlobalUnlock hMemHandle
                EmptyClipboard
                SetClipboardData m_cfHTMLClipFormat, hMemHandle
                            
             End If
          
          End If
       
          Call CloseClipboard
       End If
    
    End Sub
    
    Public Function GetHTMLClipboard() As String
    
       Dim sData As String
       
       If RegisterCF = 0 Then Exit Function
       
       If CBool(OpenClipboard(0)) Then
       
          Dim hMemHandle As Long, lpData As Long
          Dim nClipSize As Long
          
          GlobalUnlock hMemHandle
    
          'Retrieve the data from the clipboard
          hMemHandle = GetClipboardData(m_cfHTMLClipFormat)
          
          If CBool(hMemHandle) Then
                   
             lpData = GlobalLock(hMemHandle)
             If lpData <> 0 Then
                nClipSize = lstrlen(lpData)
                sData = String(nClipSize + 10, 0)
                
    
                Call CopyMemory(ByVal sData, ByVal lpData, nClipSize)
                
                Dim nStartFrag As Long, nEndFrag As Long
                Dim nIndx As Long
                
                'If StartFragment appears in the data's description,
                'then retrieve the offset specified in the description
                'for the start of the fragment. Likewise, if EndFragment
                'appears in the description, then retrieve the
                'corresponding offset.
                nIndx = InStr(sData, "StartFragment:")
                If nIndx Then
                   nStartFrag = CLng(Mid(sData, _
                                     nIndx + Len("StartFragment:"), 10))
    
                End If
                nIndx = InStr(sData, "EndFragment:")
                If nIndx Then
                   nEndFrag = CLng(Mid(sData, nIndx + Len("EndFragment:"), 10))
                End If
                
                'Return the fragment given the starting and ending
                'offsets
                If (nStartFrag > 0 And nEndFrag > 0) Then
                   GetHTMLClipboard = Mid(sData, nStartFrag + 1, _
                                     (nEndFrag - nStartFrag))
                End If
                            
             End If
          
          End If
    
       
          Call CloseClipboard
       End If
    
    
    End Function
    					
  5. Adicione o seguinte código na janela de código de Form1 :
    Private Sub Command1_Click()
        Dim sFrag As String, sStart As String, sEnd As String
        sStart = "<HTML><BODY><FONT FACE=Arial SIZE=1 COLOR=BLUE>"
        sFrag = "<B>This is bold</B> and <I>this is italic.</I>"
        sEnd = "</FONT></BODY></HTML>"
        PutHTMLClipboard sFrag, sStart, sEnd
    End Sub
    
    Private Sub Command2_Click()
        MsgBox GetHTMLClipboard
    End Sub
    					
  6. Prima a tecla F5 para iniciar o programa do Visual Basic. Clique em Colocar HTML para adicionar os dados HTML para a área de transferência. Em seguida, clique em Obter HTML para obter os dados da área de transferência. Note que uma caixa de mensagem apresenta o fragmento de HTML.
  7. Inicie o Microsoft Word (ou qualquer aplicação que reconhece o formato HTML para a área de transferência). Cola o conteúdo da área de transferência num novo documento para examinar os resultados do código HTML contida na área de transferência.

Notas adicionais

Utilizar uma abordagem que envia o código HTML para a área de transferência pode ser especialmente útil para clientes de automatização do Office. Por exemplo, se tiver um cliente de automatização que necessita para gerar dados formatados para células no Microsoft Excel ou parágrafos no Microsoft Word, pode criar os dados no código HTML, enviá-lo para a área de transferência e, em seguida, colá-lo a aplicação. Utilizando esta técnica, pode reduzir o número de chamadas de fora de processo para o cliente de automatização.

Referências

Para mais informações sobre as especificidades do formato de área de transferência de HTML, consulte o tópico "Formato de área de transferência de HTML" no seguinte Web site da MSDN (Microsoft Developer Network):
http://msdn2.microsoft.com/en-us/library/Aa767917.aspx (http://msdn2.microsoft.com/en-us/library/Aa767917.aspx)

A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Office Basic 2007
  • Microsoft Office Enterprise 2007
  • Microsoft Office Home and Student 2007
  • Microsoft Office Professional 2007
  • Microsoft Office Professional Plus 2007
  • Microsoft Office Small Business 2007
  • Microsoft Office Standard 2007
  • Microsoft Office Ultimate 2007
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Basic Edition 2003
  • Microsoft Office Small Business Edition 2003
  • Microsoft Office Standard Edition 2003
  • Microsoft Office Students and Teachers Edition 2003
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
Palavras-chave: 
kbmt kbexpertiseinter kbclipboard kbhowto kbhtml KB274326 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 274326  (http://support.microsoft.com/kb/274326/en-us/ )