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.