求用SHAutoComplete实现自动匹配的实例

sxj0384 2009-12-27 06:28:02
我的程序有个combobox是用来输网址的,我想让它有像IE一样当输入网址时弹出下拉列表自动匹配输入的内容.
在网上看了可以用SHAutoComplete来实现,可是都没有实例,我是菜鸟,一点也不懂,请高手不吝惜给个实例.
请高手指教!
谢谢了!
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxj0384 2009-12-31
  • 打赏
  • 举报
回复
谢谢了~~
sxj1234 2009-12-31
  • 打赏
  • 举报
回复
多谢各位的热心指教,小菜感激不尽~~
vansoft 2009-12-29
  • 打赏
  • 举报
回复
补充说一句,不是这几代码就可以搞定的.
Tiger_Zhao 2009-12-29
  • 打赏
  • 举报
回复
ComboBox 也可以的,不过编辑框是子窗口。
SHAutoComplete GetWindow(Combo1.hWnd, GW_CHILD), SHACF_DEFAULT
lingll 2009-12-29
  • 打赏
  • 举报
回复
建一class
'---------------------------------------------------------------------------------------
' Module : cAutoComplete
' DateTime : 2004-3-5 1:14
' Author : Lingll
' Email : lingll_xl@163.com
' Purpose :
'---------------------------------------------------------------------------------------

Option Explicit

Private Declare Function SHAutoComplete Lib "Shlwapi.dll" (ByVal hwndEdit As Long, ByVal dwFlags As Long) As Long
Private Declare Function DllGetVersion Lib "Shlwapi.dll" (ByRef dvi As DLLVERSIONINFO) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" ( _
ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, _
ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long



Private Type DLLVERSIONINFO
cbSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildVersion As Long
dwPlatformID As Long
End Type

Private Const SHACF_AUTOSUGGEST_FORCE_ON = &H10000000
Private Const SHACF_AUTOSUGGEST_FORCE_OFF = &H20000000
Private Const SHACF_AUTOAPPEND_FORCE_ON = &H40000000
Private Const SHACF_AUTOAPPEND_FORCE_OFF = &H80000000
Private Const SHACF_DEFAULT = &H0
Private Const SHACF_FILESYSTEM = &H1
Private Const SHACF_URLHISTORY = &H2
Private Const SHACF_URLMRU = &H4
Private Const SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU)
Private Const SHACF_USETAB As Long = &H8


Private Const DLLVER_PLATFORM_WINDOWS = &H1
Private Const DLLVER_PLATFORM_NT = &H2
Private Const S_OK = &H0
Private Const NOERROR = 0

Public Enum SHACF_FLAGS
eSHACF_AUTOSUGGEST_FORCE_ON = SHACF_AUTOSUGGEST_FORCE_ON
eSHACF_AUTOSUGGEST_FORCE_OFF = SHACF_AUTOSUGGEST_FORCE_OFF
eSHACF_AUTOAPPEND_FORCE_ON = SHACF_AUTOAPPEND_FORCE_ON
eSHACF_AUTOAPPEND_FORCE_OFF = SHACF_AUTOAPPEND_FORCE_OFF
eSHACF_DEFAULT = SHACF_DEFAULT
eSHACF_FILESYSTE = SHACF_FILESYSTEM
eSHACF_URLHISTORY = SHACF_URLHISTORY
eSHACF_URLMRU = SHACF_URLMRU
eSHACF_URLALL = SHACF_URLALL
eSHACF_USETAB = SHACF_USETAB
End Enum
'local variable(s) to hold property value(s)
Private mvarErrDescription As String 'local copy



Public Property Get ErrDescription() As String
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.ErrDescription
ErrDescription = mvarErrDescription
End Property


Public Function Assign(hwndEdit As Long, Optional nFlags As SHACF_FLAGS = eSHACF_DEFAULT) As Boolean
Dim dvi As DLLVERSIONINFO

dvi.cbSize = Len(dvi)
If DllGetVersion(dvi) <> NOERROR Then
mvarErrDescription = "无法检测Shlwapi.dll的版本号"
Assign = False
Exit Function
End If
'Debug.Print "dll version:", dvi.dwMajorVersion
If dvi.dwMajorVersion >= 5 Then
If SHAutoComplete(hEdit(hwndEdit), nFlags) <> S_OK Then
mvarErrDescription = "无法开启自动完成功能"
Assign = False
Exit Function
End If
Else
mvarErrDescription = "IE版本低于5"
Assign = False
Exit Function
End If

Assign = True
End Function


Private Function hEdit(nHwnd)
hEdit = FindWindowEx(nHwnd, 0, "EDIT", vbNullString)
End Function


用法:


Set mIeAuto = New cAutoComplete
mIeAuto.Assign Combo1.hWnd, eSHACF_FILESYSTE Or eSHACF_URLALL Or eSHACF_USETAB Or eSHACF_AUTOSUGGEST_FORCE_ON
Tiger_Zhao 2009-12-28
  • 打赏
  • 举报
回复
'Code by Lúcio Chaves (luciochaves@bol.com.br)
'This program needs a textbox ('Text1') on a form
Private Const SHACF_AUTOAPPEND_FORCE_OFF = &H80000000
Private Const SHACF_AUTOAPPEND_FORCE_ON = &H40000000
Private Const SHACF_AUTOSUGGEST_FORCE_OFF = &H20000000
Private Const SHACF_AUTOSUGGEST_FORCE_ON = &H10000000
Private Const SHACF_DEFAULT = &H0
Private Const SHACF_FILESYSTEM = &H1
Private Const SHACF_URLHISTORY = &H2
Private Const SHACF_URLMRU = &H4
Private Const SHACF_USETAB = &H8
Private Const SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU)
Private Declare Sub SHAutoComplete Lib "shlwapi.dll" (ByVal hwndEdit As Long, ByVal dwFlags As Long)
Private Sub Form_Load()
SHAutoComplete Text1.hWnd, SHACF_DEFAULT
End Sub
sxj0384 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xxyj6450 的回复:]
SHAutoComplete绑定控件是很简单的,但是它默认只可以匹配IE记录,最近文件记录等系统关键字,而不支持自定义的关键字,如果需要用自定义的关键字列表那就会很麻烦了.
其实大可以自己做一个自动完成的组合框出来,网上N多源码
[/Quote]
暂时只想学会使用SHAutoComplete
自动完成的组合框以后再学
知道的请指教,谢谢了!
SYSSZ 2009-12-28
  • 打赏
  • 举报
回复
我试了试,Combo1没反应,SHAutoComplete Text1.hWnd, SHACF_DEFAULT
和SHAutoComplete RichTextBox1.hWnd, SHACF_DEFAULT都可以,非文本编辑控件不可?Combo也有编辑框,但就是不行。
vansoft 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xxyj6450 的回复:]
SHAutoComplete绑定控件是很简单的,但是它默认只可以匹配IE记录,最近文件记录等系统关键字,而不支持自定义的关键字,如果需要用自定义的关键字列表那就会很麻烦了.
其实大可以自己做一个自动完成的组合框出来,网上N多源码
[/Quote]

自定义关键字是支持的,
只是对中文支持得不太好.
三断笛 2009-12-27
  • 打赏
  • 举报
回复
SHAutoComplete绑定控件是很简单的,但是它默认只可以匹配IE记录,最近文件记录等系统关键字,而不支持自定义的关键字,如果需要用自定义的关键字列表那就会很麻烦了.
其实大可以自己做一个自动完成的组合框出来,网上N多源码
贝隆 2009-12-27
  • 打赏
  • 举报
回复
飘过
yaozi8 2009-12-27
  • 打赏
  • 举报
回复
期待吧,我也想知道。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧