Add File or URL AutoCompletion to TextBoxes and ComboBoxes
Demonstrates how to add File System and/or URL AutoCompletion to a TextBox or Combo Box,
using the same code used for the System Common Dialog file name, Start->Run dialog box and IE Address
bar. Note that IE5 or above is required to use this function.
Start a new project in VB and add a Module. Then add this code to the Module:
Option Explicit
Public Enum SHAutoCompleteFlags
' // Currently (SHACF_FILESYSTEM | SHACF_URLALL)
SHACF_DEFAULT = &H0
' // This includes the File System as well as the rest of the shell
' (Desktop\My Computer\Control Panel\)
SHACF_FILESYSTEM = &H1
' // URLs in the User's History
SHACF_URLHISTORY = &H2
' // URLs in the User's Recently Used list.
SHACF_URLMRU = &H4
' // Use the tab to move thru the autocomplete possibilities
' instead of to the next dialog/window control.
SHACF_USETAB = &H8
SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU)
' // This includes the File System
SHACF_FILESYS_ONLY = &H10
'#if (_WIN32_IE >= = &H0600)
' // Same as SHACF_FILESYS_ONLY except it only includes directories,
' UNC servers, and UNC server shares.
SHACF_FILESYS_DIRS = &H20
'#End If ' // (_WIN32_IE >= = &H0600)
' // Ignore the registry default and force the feature on.
SHACF_AUTOSUGGEST_FORCE_ON = &H10000000
' // Ignore the registry default and force the feature off.
SHACF_AUTOSUGGEST_FORCE_OFF = &H20000000
' // Ignore the registry default and force the feature on.
' (Also know as AutoComplete)
SHACF_AUTOAPPEND_FORCE_ON = &H40000000
' // Ignore the registry default and force the feature off.
' (Also know as AutoComplete)
SHACF_AUTOAPPEND_FORCE_OFF = &H80000000
End Enum
Private Declare Function SHAutoComplete Lib "shlwapi.dll" ( _
ByVal hwndEdit As Long, ByVal dwFlags As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, _
ByVal lpszWindow As String) As Long
Private Const S_OK = 0
Public Function AutoComplete( _
ByVal hWnd As Long, _
ByVal eFlags As SHAutoCompleteFlags _
)
Dim lR As Long
lR = SHAutoComplete(hWnd, eFlags)
AutoComplete = (lR <> S_OK)
End Function
Public Function GetComboBoxEdithWnd(ByVal hWnd As Long) As Long
GetComboBoxEdithWnd = FindWindowEx(hWnd, 0, "EDIT", vbNullString)
End Function
To test the function, add a TextBox and a ComboBox to the Project's form. Name the TextBox
"txtTest" and the ComboBox "cboTest". Then add this code to the project's
form:
Private Sub Form_Load()
AutoComplete txtTest.hWnd, SHACF_FILESYS_ONLY
AutoComplete GetComboBoxEdithWnd(cboTest.hWnd), SHACF_FILESYS_ONLY
End Sub
Run the project. When you start typing a file name into either of the controls, you
will see that the AutoComplete drop down displays, and you can pick the nearest matching
file.
|