txtMatic




Option Explicit
#If Win32 Then
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
#Else
Private Const WM_USER = &H400
Private Const LB_FINDSTRING = (WM_USER + 16)
Private Declare Function SendMessage Lib _
"User" (ByVal hWnd As Integer, ByVal _
wMsg As Integer, ByVal wParam As _
Integer, lParam As Any) As Long
#End If
Private Sub Form_Load()
List1.AddItem "Orange"
List1.AddItem "Banana"
List1.AddItem "Apple"
List1.AddItem "Pear"
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

This code creates a smart input box. Every time you type something into this text box
the first letters of your string are compared against the members of a hidden list box.
The code guesses how your string should be completed and finishes it for you, similar
to how the latest versions of Microsoft Excel and Internet Explorer behave. To use this
technique, add a list box to your form and set its Visible property to False.
This example fills the list at Form_Load with some likely selections. In a real app, you'd
add a new element to the list after each user entry is completed.
Add this code to the form containing the text and list boxes:










( txtmatic.html )- by Paolo Puglisi - Modifica del 17/12/2023