Partilhar via


Usando o Preenchimento Automático do Painel de Entrada

No Windows Vista, o Painel de Entrada do Tablet PC integra novos recursos de Preenchimento Automático que permitem que a lista de Preenchimento Automático de um aplicativo seja atualizada em tempo real à medida que a tinta de um usuário é reconhecida no Painel de Entrada. Além disso, a lista de preenchimento automático do aplicativo está posicionada em um local conveniente para os usuários do Painel de Entrada. Sem o Preenchimento Automático do Painel de Entrada, usar os recursos de Preenchimento Automático com o Painel de Entrada é um processo difícil, exigindo que os usuários insiram um caractere de cada vez e movam o Painel de Entrada para acessar as sugestões de Preenchimento Automático. Com integração, Autocomplete é uma ferramenta poderosa para usuários de Tablet PC que acelera e aumenta a facilidade de inserir texto com o Painel de Entrada.

painel de entrada com a lista de preenchimento automático do IE

Há três opções sobre como uma aplicação pode aproveitar a integração do Preenchimento Automático do Painel de Entrada. Os aplicativos que contêm funcionalidade de Preenchimento Automático, criada com o Preenchimento Automático do Shell (por meio da interface IAutoComplete) ou o Preenchimento Automático do .NET Framework (por meio da Enumeração AutoCompleteMode), recebem integração do Preenchimento Automático do Painel de Entrada sem necessidade de alterações de código. Os aplicativos que incluem campos de texto personalizados de Preenchimento Automático podem usar a API de Preenchimento Automático do Painel de Entrada para obter a mesma funcionalidade.

Em todos os casos, você pode fazer essas modificações na lista de Preenchimento Automático do aplicativo sem duplicar ou modificar a interface do usuário ou a lógica de previsão usada por um aplicativo para gerar uma lista de Preenchimento Automático. A lista de Preenchimento Automático continua a ser desenhada pelo aplicativo e o conteúdo da lista de Preenchimento Automático é o mesmo como se o texto fosse digitado diretamente no campo de edição.

A integração do Preenchimento Automático do Painel de Entrada é suportada no sistema operacional Windows Vista ou em versões posteriores. A integração do Preenchimento Automático do Painel de Entrada é incorporada ao Preenchimento Automático do Shell, começando com o Windows Vista, e ao desenvolvimento do Windows Forms, começando com o .NET Framework versão 3.0. Embora IAutoComplete e AutoCompleteMode sejam executados em versões anteriores do Windows, a integração de preenchimento automático do Painel de Entrada não é suportada no Microsoft Windows XP Tablet PC Edition ou em sistemas operacionais anteriores. Se você executar o Preenchimento Automático do Painel de Entrada em versões anteriores do Tablet PC, os aplicativos serão revertidos para o comportamento de pré-integração.

Razões para integrar listas de preenchimento automático de aplicativos com o painel de entrada

A integração da lista de Preenchimento Automático de um aplicativo permite a máxima facilidade e velocidade de entrada para usuários que estão inserindo texto em um campo de texto que inclui a funcionalidade de Preenchimento Automático. Além disso, um aplicativo que inclui integração de Preenchimento Automático do Painel de Entrada imediatamente aparece como se tivesse sido desenvolvido com o Tablet PC em mente, tornando o aplicativo mais atraente para os usuários do Tablet PC.

Como o Painel de Entrada e a Lista de Preenchimento Automático Interagem sem Integração

Usando o Painel de Entrada para inserir texto em um campo de texto que inclui uma lista de Preenchimento Automático, mas que não está integrado ao Painel de Entrada:

  1. O usuário coloca o foco no campo de texto e abre o Painel de Entrada.
  2. O usuário escreve um ou dois caracteres.
  3. O utilizador clica em Inserir. O Painel de Entrada insere o texto no campo de texto do aplicativo. A lista de Preenchimento Automático do aplicativo aparece e provavelmente é parcial ou completamente obscurecida pelo Painel de Entrada.
  4. O usuário arrasta o Painel de Entrada para descobrir a lista de Preenchimento Automático do aplicativo.
  5. Supondo que a entrada correta esteja incluída na lista de Preenchimento automático, o usuário pode agora selecionar essa entrada; caso contrário, o usuário deve repetir as etapas 2 e 3.

Trata-se claramente de um processo complexo. As expectativas do usuário sobre como uma lista de Preenchimento Automático deve funcionar são frustradas e sua capacidade de executar tarefas é prejudicada.

Como o painel de entrada e a interação da lista de preenchimento automático melhoram com a integração

Usando o Painel de Entrada para inserir texto em um campo de texto que inclui uma lista de Preenchimento Automático integrada ao Painel de Entrada:

  1. O usuário coloca o foco no campo de texto e abre o Painel de Entrada.
  2. O usuário escreve um ou dois caracteres. A lista de Preenchimento Automático do aplicativo aparece diretamente acima ou diretamente abaixo do Painel de Entrada enquanto o usuário escreve texto.
  3. O usuário seleciona a entrada na lista Preenchimento automático; A entrada é inserida diretamente no campo de texto do aplicativo, ou o usuário repete a etapa 2 até que a entrada correta apareça.

Devido à integração, a lista de preenchimento automático aparece e é atualizada enquanto o usuário está escrevendo no Painel de Entrada. Além disso, a lista é posicionada de modo que seja conveniente para o usuário acessar enquanto escreve e não obscurecida pelo Painel de Entrada. Por fim, quando o usuário seleciona um item de uma lista de Preenchimento Automático, o item é inserido diretamente no campo de entrada de texto do aplicativo, permitindo que o usuário ignore a etapa de inserção de texto do Painel de Entrada.

painel de entrada com a lista de preenchimento automático do Outlook Express

Componentes de preenchimento automático padrão que incluem integração de preenchimento automático do painel de entrada

Tanto IAutoComplete quanto AutoCompleteMode incluem integração integrada do Preenchimento Automático do Painel de Entrada. As aplicações que utilizam qualquer um destes componentes padrão de Conclusão Automática podem tirar partido da funcionalidade de Conclusão Automática do Painel de Entrada com pouco ou nenhum trabalho adicional. Além disso, embora o Preenchimento Automático do Painel de Entrada seja suportado apenas no Windows Vista ou em novas versões do sistema operacional Windows, os aplicativos que foram criados usando IAutoComplete antes do lançamento do Windows Vista obtêm a integração do Preenchimento Automático do Painel de Entrada automaticamente quando executados no Windows Vista. As seções a seguir contêm mais informações sobre os elementos específicos IAutoComplete e AutoCompleteMode que incluem a integração de Preenchimento Automático do Painel de Entrada.

Integração do preenchimento automático do shell com o preenchimento automático do painel de entrada

Os aplicativos que usam IAutoComplete obtêm integração com preenchimento automático do Painel de Entrada gratuitamente. Enquanto as APIs de Preenchimento Automático do Shell estão incluídas no Windows 2000 em diante, a integração de Preenchimento Automático do Painel de Entrada é suportada apenas no Windows Vista e em versões mais recentes. No entanto, os aplicativos criados antes do lançamento do Windows Vista que usam IAutoComplete obtêm automaticamente a integração de Preenchimento Automático do Painel de Entrada quando executados no Windows Vista.

Para tirar proveito do Tablet Autocomplete desta forma, você deve usar o objeto de preenchimento automático (CLSID_Autocomplete). Se desejar fornecer a funcionalidade de preenchimento automático para URLs ou nomes de arquivo, use a funçãoSHAutoComplete para criar o objeto de preenchimento automático.

Além de IAutoComplete , você pode implementar IAutoComplete2 ou IAutoCompleteDropDowns diretamente e ainda obter a integração automática do Painel de Entrada automaticamente.

Integração de preenchimento automático do painel de entrada com aplicativos do .NET Framework

A partir do .NET Framework 3.0, as caixas de texto do Windows Forms incluem o Preenchimento Automático. A funcionalidade de autocompletar da caixa de texto no Windows Forms é construída sobre o autocompletar do Shell, o que significa que a integração com o autocompletar do Painel de Introdução também está incorporada. O .NET Framework 3.0 é suportado no nível inferior em edições do Windows lançadas antes do Windows Vista. No entanto, como a integração do Preenchimento Automático do Painel de Entrada só é suportada no Windows Vista ou em versões posteriores, a integração do Preenchimento Automático do Painel de Entrada só funciona em um aplicativo do .NET Framework 3.0 quando instalado no Windows Vista ou em versões posteriores.

Os aplicativos que desejam aproveitar a integração do Input Panel Autocomplete no .NET Framework 3.0 devem usar um TextBox do Windows Forms com a propriedade AutoCompleteMode habilitada. Você não precisa fazer nenhum trabalho adicional além de fazer com que o Preenchimento Automático do Windows Forms funcione para aproveitar a integração do Preenchimento Automático do Painel de Entrada.

Usando APIs de preenchimento automático do painel de entrada diretamente

Os programadores que desenvolvem caixas de texto personalizadas com Preenchimento Automático devem trabalhar diretamente com as APIs de Preenchimento Automático do Painel de Entrada para conseguirem obter a experiência aprimorada de introdução de texto que a integração do Painel de Entrada oferece nas suas aplicações. As APIs de Preenchimento Automático do Painel de Entrada estão incluídas como parte do sistema operacional Windows Vista e como parte do SDK da Plataforma de Tablet versão 1.9 ou posterior. As interfaces de preenchimento automático do painel de entrada são interfaces baseadas em COM.

A seção a seguir descreve o trabalho dessas interfaces em detalhes para um aplicativo C++. No entanto, essas interfaces COM podem ser implementadas na maioria das linguagens, incluindo C#, através do uso de Interoperabilidade COM.

Para implementar a integração do Preenchimento Automático do Painel de Entrada em uma caixa de texto personalizada de Preenchimento Automático, as duas interfaces necessárias são a ITipAutocompleteProvider Interface e a ITipAutocompleteClient Interface. As definições para essas interfaces são encontradas em TipAutoComplete.h e TipAutoComplete_i.c.

Primeiro, um aplicativo deve definir e instanciar uma classe de provedor de Preenchimento Automático, que implementa ITipAutocompleteProvider para cada campo de entrada de texto que inclui uma lista de Preenchimento Automático. Essa classe gerencia o lado do aplicativo da integração de preenchimento automático. Todas as solicitações de preenchimento automático do painel de entrada são feitas do cliente de preenchimento automático para o aplicativo por meio do provedor de preenchimento automático do aplicativo. O provedor de Preenchimento Automático do aplicativo deve ter acesso ao HWND para a lista de Preenchimento Automático do aplicativo e ao HWIND para o campo de entrada de texto associado. Além disso, os seguintes métodos de ITipAutocompleteProvider devem ser implementados:

  • Método ITipAutocompleteProvider::UpdatePendingText: Este método é usado pelo cliente Autocomplete para notificar o aplicativo do texto que um usuário gravou no Painel de Entrada. Ao receber essa notificação, o provedor é responsável por gerar uma lista de preenchimento automático como se o texto tivesse sido digitado no campo de entrada de texto do aplicativo. A cadeia de caracteres é passada para o provedor de preenchimento automático através do método ITipAutocompleteProvider::UpdatePendingText e inclui apenas o texto atualmente no Painel de Entrada. Portanto, se houver texto adicional no campo de entrada de texto, é responsabilidade do provedor anexá-lo corretamente ao texto enviado pelo cliente. A cadeia de caracteres que passa por Método ITipAutocompleteProvider::UpdatePendingText deve ser tratada como um substituto para a seleção atual no campo. Se não houver nenhuma seleção atual, ela deve ser colocada na posição do ponto de inserção atual. Depois que a lista de Preenchimento Automático for gerada, o provedor deve chamar o Método ITipAutocompleteProvider::Show passando TRUE para exibir a lista de Preenchimento Automático. A aplicação não deve armazenar em cache as chamadas para UpdatePendingText, mas sim tratar cada chamada adicional para UpdatePendingText como um cancelamento da chamada anterior, para evitar a atualização intermitente de uma interface de lista de preenchimento automático desatualizada. O seguinte exemplo de código ilustra estas práticas.

    HRESULT SampleProvider::UpdatePendingText(BSTR bstrPendingText)
    {
       //Discard previously cached pending text from Input Panel
       m_bstrPending.Empty();
        //Store the new pending text from Input Panel as m_bstrPending
    m_bstrPending = bstrPendingText;
    
        //Get the text from the field in two chunks. The characters to
    //the left of the selection and the characters to the right.
    CComBSTR bstrLeftContext = //Text to the left of the selection
            CComBSTR bstrRightContext = //Text to the right of the selection
    
    //Discard previously cached complete text
        m_bstrCompleteText.Empty();
        //Append to the field text from the left of the selection
        //the text from Input Panel and then append to that
        //the field text to the right of the selection
        m_bstrCompleteText.Append(bstrLeftContext);
        m_bstrCompleteText.Append(m_bstrPending);
        m_bstrCompleteText.Append(bstrRigtContext);
    
        //Update the app's AC list based on m_bstrCompleteText
        //...
    
        //Show the updated AC list by calling the provider's Show method
       Show(true);
       return S_OK;
    }
    
  • Método ITipAutocompleteProvider::Show: Este método é chamado a partir de UpdatePendingText, mas também pode ser chamado pelo cliente Autocomplete a qualquer momento. Ao receber essa chamada, o provedor de preenchimento automático deve ocultar ou mostrar o provedor de preenchimento automático conforme indicado pelo parâmetro. Antes de mostrar a lista de Preenchimento Automático, espera-se que o provedor de Preenchimento Automático consulte o cliente de Preenchimento Automático sobre onde posicionar a lista de Preenchimento Automático. Mais informações sobre como posicionar a lista de Preenchimento Automático serão exibidas posteriormente neste artigo.

Em seguida, o aplicativo deve usar a ATL (Active Template Library) função CoCreateInstance para produzir uma instância da Interface ITipAutocompleteClient com ID de classe CLSID_TipAutoCompleteClient como um servidor intra-processo e, em seguida, registrar o provedor com o cliente. O cliente Autocomplete Método ITipAutocompleteClient::AdviseProvider registra o provedor com o cliente para permitir que o cliente chame o objeto do provedor Autocomplete do aplicativo. Se tiptsf.dll não estiver presente no sistema, a função CoCreateInstance falhará e retornará REGDB_E_CLASSNOTREG. Neste ponto, o aplicativo pode descartar seu objetoITipAutocompleteProvidere proceder como se o Painel de Entrada não existisse, porque ele não existe em tal sistema.

O aplicativo pode optar por criar uma instância de ITipAutocompleteClient ou uma instância por campo de texto. A primeira opção exige que o provedor seja desregistado e registado novamente cada vez que o foco é alterado. Mais informações sobre como cancelar o registro do provedor de Preenchimento Automático serão exibidas posteriormente neste tópico.

Há várias etapas envolvidas no posicionamento da lista de Preenchimento Automático que devem ser coordenadas entre o provedor de Preenchimento Automático (aplicativo) e o cliente de Preenchimento Automático (Painel de Entrada). Antes de a lista de Preenchimento Automático ser exibida, seja como resultado de uma chamada para o método Show do fornecedor de Preenchimento Automático ou devido ao utilizador inserir texto usando o teclado, o fornecedor é obrigado a consultar o cliente sobre onde posicionar a lista de Preenchimento Automático. O provedor deve tomar as seguintes medidas:

  • Utilize o método ITipAutocompleteClient::RequestShowUI do cliente Autocomplete, ,, para determinar se o Painel de Entrada está pronto para exibir a lista Autocomplete. RequestShowUI usa o parâmetro HWND que é o HWND para a janela da lista de Preenchimento Automático, e o método retorna TRUE ou FALSE para indicar se é o estado em que a lista de Preenchimento Automático pode ser mostrada. Se o cliente retornar FALSE, o provedor não deve tentar mostrar a lista de Autocomplete.

  • Chame RequestShowUI para definir o identificador da janela da lista pop-up de Autocomplete antes de chamar o Método ITipAutocompleteClient::PreferredRects . Se não fizer isso, ocorrerá um erro de E_INVALIDARG ao chamar PreferredRects.

  • Se o RequestShowUI retornar TRUE, o fornecedor deverá calcular o retângulo padrão das coordenadas de tela da lista de Preenchimento Automático com base na localização do campo de entrada de texto e, em seguida, chamar o método ITipAutocompleteClient::PreferredRects do cliente de Preenchimento Automático . Isso permite que o cliente de Preenchimento Automático ajuste o retângulo para evitar que a lista de Preenchimento Automático se sobreponha ao Painel de Entrada. O método PreferredRects usa quatro parâmetros:

    • RECT rcACList: O retângulo de coordenadas de ecrã padrão da lista de Preenchimento Automático.
    • RECT rcField: O retângulo de coordenadas da tela do campo de entrada de texto correspondente.
    • RECT *prcModifiedACList: O retângulo de coordenadas de ecrã ajustado para o Preenchimento Automático
    • BOOL *pfShowAbove: Este parâmetro indica ao provedor se o retângulo prcModifiedACList posiciona a lista de Preenchimento Automático acima ou abaixo do Painel de Entrada. O aplicativo pode usar essas informações para desenhar corretamente elementos da interface do usuário, como alças de redimensionamento e barras de rolagem. O provedor deve inicialmente passar na direção em que a lista de preenchimento automático seria posicionada em relação ao campo de entrada de texto por rcACList. O cliente não altera pfShowAbove ao definir prcModifiedACList igual a rcACList.

    Use os valores de retorno dos argumentos prcModifiedACList e pfShowAbove para posicionar e mostrar a janela da lista Autocompletar. Se o Painel de Entrada não estiver em uso, RequestShowUI sempre retornará TRUE e prcModifiedACList será sempre o mesmo que rcACList. pfShowAbove também permanece inalterado, o resultado é que as chamadas não afetam o comportamento do aplicativo. O código de exemplo a seguir ilustra essas práticas.

HRESULT SampleProvider::Show(BOOL fShow)
{
    //Ask the AC client if it is OK to show the Autocomplete list.
    BOOL fAllowShowing = FALSE;
    m_spACClient->RequestShowUI(m_hWndList, &fAllowShowing);

    if (fShow && fAllowingShowing)
        {
            // Create the parameters required to call PreferredRects
            RECT rcField = //Rectangle for app's text field
            RECT rcACList = //Default rectangle for app's AC list
            RECT rcModifiedACList = {0, 0, 0, 0};
            BOOL fShowAbove = TRUE;

//Ask the AC client to modify the position of the AC list
m_spACClient->PreferredRects(&rcACList, &rcField,
&rcModifiedACList, &fShowAbove);

            //Show the Autocomplete UI at the modified preferred rectangle
            //from rcModifiedACList and the directional info provide by
//fShowAbove
            //...
        }
    else
        {
        //Hide the Autocomplete list and clean up
        //...
        }
    return S_OK;
}

Quando o utilizador seleciona um item na Lista de Autocompletar, o fornecedor precisa chamar o método ITipAutocompleteClient::UserSelection do cliente , além de inserir o texto do item selecionado no campo de entrada de texto. O Painel de Entrada usa essa notificação para descartar todo o texto restante que ainda não foi inserido do Painel de Entrada.

Finalmente, quando o provedor não é mais necessário, o provedor deve ser desvinculado do cliente Autocomplete chamando o ITipAutocompleteClient::UnadviseProvider Method do cliente Autocomplete cancelar o registro do provedor. O provedor pode precisar ser cancelado por um de dois motivos: porque o campo de entrada de texto ao qual o provedor está associado foi destruído ou porque o aplicativo opta por criar apenas um cliente de Preenchimento Automático, em vez de um por campo de entrada de texto. Nesse caso, o provedor deve ser desregistrado sempre que o foco for desviado do campo de texto.

Conclusão

A integração do Autocompletar no Painel de Entrada é uma ferramenta poderosa para aprimorar a experiência do utilizador em aplicações do Windows que incluem listas de Autocompletar em tablets. Sem integração, os usuários do Painel de Entrada são obrigados a passar por um processo tedioso de inserir texto um caractere de cada vez e reposicionar o Painel de Entrada para usar o Preenchimento Automático. Com a integração, as listas de preenchimento automático aparecem em um local conveniente à medida que os usuários pintam no Painel de Entrada, aumentando a velocidade e a facilidade de entrada de texto. Em aplicativos que incluem a funcionalidade de Preenchimento Automático criada com base no Preenchimento Automático do Shell ou no Preenchimento Automático do .NET Framework 3.0, a integração do Preenchimento Automático do Painel de Entrada é um recurso gratuito e atraente. Além disso, um conjunto simples de interfaces baseadas em COM é fornecido para permitir a mesma experiência integrada para aplicativos que optam por usar controles de preenchimento automático personalizados.

de referência do painel de entrada de texto