|
|
|
|
|
Dicas
|
|
Visual Basic (Datas/Números/Strings)
|
|
|
Título da Dica: Adiantando o conteúdo completo do digitado, através de aproximação de conteúdo
|
|
|
|
Postada em 31/10/2003 por Roßerto
O código a seguir, cria um caixa de entrada de text (input box) inteligente.
Toda vez que você digita alguma coisa numa caixa de texto, as primeiras letras do texto sendo digitado, são comparadas com uma lista invisível de textos. O código "advinha" que texto estaria sendo digitado de uma forma similar ao comportamento da nova versão do Internet Explorer.
Para usar esta técnica, adicione uma lista de texto (list box) no seu formulário e mude a propriedade Visible para False. Neste exemplo, usei uma lista fictícia de informações que é preenchida no evento Load do form. Numa aplicação real, você deve ir adicionando um novo elemento à lista de texto após o usuário completar a digitação na caixa de texto.
Escreva o código abaixo no formulário que contém a lista de textos e a caixa texto para digitação:
Option Explicit Private Const LB_FINDSTRING = &H18F Private Declare Function SendMessage Lib _ "User32" Alias "SendMessageA" (ByVal _ hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) _ As Long
Private Sub Form_Load()
List1.AddItem "Laranja" List1.AddItem "Banana" List1.AddItem "Maça" List1.AddItem "Pera"
End Sub
Private Sub Text1_Change()
Dim pos As Long List1.ListIndex = SendMessage( _ List1.hWnd, LB_FINDSTRING, -1, ByVal _ CStr(Text1.Text))
If List1.ListIndex = -1 Then pos = Text1.SelStart Else pos = Text1.SelStart Text1.Text = List1 Text1.SelStart = pos Text1.SelLength = Len(Text1.Text) - pos End If
End Sub
Private Sub Text1_KeyDown(KeyCode As _ Integer, Shift As Integer)
On Error Resume Next
If KeyCode = 8 Then 'Backspace
If Text1.SelLength <> 0 Then Text1.Text = Mid$(Text1, 1, _ Text1.SelStart - 1) KeyCode = 0 End If
ElseIf KeyCode = 46 Then 'Del
If Text1.SelLength <> 0 And Text1.SelStart <> 0 Then Text1.Text = "" KeyCode = 0 End If
End If
End Sub
|
|
|
|
|