Smart Device - InputPanel Númerico

Mostrando a parte númerica do teclado virtual no InputPanel usando VB.NET

Em quase todas as aplicações para Pocket PC usa-se o teclado virtual, você já deve ter desenvolvido alguma aplicação que os campos em que o usuário irá utilizar apenas a parte numérica do teclado virtual.

Nesse artigo demonstrarei como habilitar apenas a parte numérica do teclado virutal, importaremos algumas funções da Dll core.dll, usaremos a Plataforma Invoke para charmar funções de DLL não gerenciadas.

Inicando o Desenvolvimento

Usarei nesse artigo o Microsoft Visual Studio 2003, abra ele, criei um novo Projeto, usando a Linguagem VB.net, do tipo Smart Device Application, escolha a Plataforma Pocket PC e o tipo Windows Application.

Após criado o projeto araste um TexBox, um InputPanel e um Button para o Formulário principal, altere a propriedade Text do Button para Mostra Teclado Virtual Numérico.

No Solution Explorer clique encima da solução e em Add/Add Modulo, coloque o nome desse módulo para InputPanelNumerico.vb, insira nesse modulo o código da Listagem 1.

 

Listagem 1. Código do InputPanelNumerico.vb

Imports System

Imports System.Runtime.InteropServices

Imports System.Drawing

Imports System.Collections

Imports System.Windows.Forms

Imports System.Data

Imports Microsoft.WindowsCE.Forms

 

Module InputPanels

#Region " P/Invoke definições "

 

Declare Function FindWindow Lib "coredll" (ByVal wndClass As String, ByVal caption As String) As IntPtr

 

Declare Function GetWindow Lib "coredll" (ByVal hWnd As IntPtr, ByVal nType As Integer) As IntPtr

 

Declare Function GetPixel Lib "coredll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer) As Integer

 

Declare Sub SetPixel Lib "coredll" (ByVal hdc As IntPtr, ByVal nXPos As Integer, ByVal nYPos As Integer, ByVal clr As Integer)

 

Declare Function GetDC Lib "coredll" (ByVal hWnd As IntPtr) As IntPtr

 

Declare Sub ReleaseDC Lib "coredll" (ByVal hWnd As IntPtr, ByVal hDC As IntPtr)

 

Declare Function SipSetCurrentIM Lib "coredll" (ByVal clsid As Byte()) As Boolean

 

Const WM_LBUTTONDOWN As Integer = &H201

Const WM_LBUTTONUP As Integer = &H202

Const GW_CHILD As Integer = 5

 

#End Region

    Public Sub InputNumeric(ByVal InputPanel1 As Microsoft.WindowsCE.Forms.InputPanel)

        ' Mostra o Teclado Virtual se ele não estiver visivel

        If Not (InputPanel1.Enabled) Then

            InputPanel1.Enabled = True

            Application.DoEvents()

        End If

 

        Dim clsidKbdIM As New Guid("{42429667-ae04-11d0-a4f8-00aa00a749b9}")

        SipSetCurrentIM(clsidKbdIM.ToByteArray())

 

        Dim hWnd As IntPtr

        hWnd = FindWindow("SipWndClass", "")

 

        hWnd = GetWindow(hWnd, GW_CHILD)

 

        Dim hDC As IntPtr

        hDC = GetDC(hWnd)

        Dim pixel As Integer

        pixel = GetPixel(hDC, 2, 2)

 

        Dim clrText As Integer

        clrText = ((CInt(SystemColors.Window.R)) Or (CInt(SystemColors.Window.G) << 8) Or (CInt(SystemColors.Window.B) << 16))

        SetPixel(hDC, 2, 2, clrText)

 

        Dim pixelNew As Integer

        pixelNew = GetPixel(hDC, 2, 2)

 

        SetPixel(hDC, 2, 2, pixel)

 

        If (pixel = pixelNew) Then

            Dim msg As Message = Message.Create(hWnd, WM_LBUTTONDOWN, New IntPtr(1), New IntPtr(&H90009))

            MessageWindow.SendMessage(msg)

            msg = Message.Create(hWnd, WM_LBUTTONUP, New IntPtr(0), New IntPtr(&H90009))

            MessageWindow.SendMessage(msg)

        End If

 

        ReleaseDC(hWnd, hDC)

    End Sub

End Module

 

Aqui foi declarada a função InputNumeric que recebe como parâmetro um InputPanel no qual só será exibido a parte numérica do telcado.

Referenciando e chamando o Teclado Virtual Númerico

É necessário referenciar os seguintes namespaces Microsoft.WindowsCE.Forms, para isso no Solution Explorer, na solução atual em References clique com o botão direito do mouse e Add Reference, abrirá seguinte janela Figura 1.

 

Figura 1. Referenciando o Namespace necessário

Agora volte ao formulário principal no evento Click do Button coloque o seguinte código, Listagem 2.

 

Listagem 2. Chamando o Teclado Virtual Númerico

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  InputNumeric(InputPanel1)

End Sub

 

Agora execute a aplicação no Emulador e veja o antes e o depois do teclado virtual, quando você clicar no Botão será exibida a parte Numérica do Teclado, você poderia ter colocar esse código no evento Load do Formulário assim quando o usuário entrasse no Formulário ele automaticamente estaria com a parte numérica do teclado virtual, veja o resultado na Figura 2.

 

Figura 2. Na primeira imagem mostra o Teclado Virtual normal, quando clicamos no Button ele mostrará o Teclado Virtual Numérico como na segunda imagem.

Conclusões

Agora você poderá usar essa função para mostrar a parte numérica do teclado virtual, em qualquer tipo de aplicação basta copiar esse modulo e executar a função.