- Код: Выделить всё
Option Explicit
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 Const CB_FINDSTRING = &H14C 'поиск чувствителен к регистру
Private Const CB_FINDSTRINGEXACT = &H158 'поиск не чувствителен к регистру
Dim strPath As String
Dim YesNo As Byte
‘-----------------------------
Private Sub Form_Load()
Combo1.AddItem "one"
Combo1.AddItem "two"
Combo1.AddItem "three"
'Здесь вставьте какую-нибудь свою директорию
Combo1.AddItem "C:\Users\GiaBer\Desktop\AAA"
Combo1.AddItem "four"
Combo1.AddItem "five"
Combo1.AddItem "six"
End Sub
Private Sub Command1_Click()
‘выбираем директорию
With CommonDialog1
.CancelError = True
.DialogTitle = "Select Folders"
.Filter = "All files (*.*)|*.*"
.FileName = "Select Folder"
.InitDir = "c:\"
.Flags = cdlOFNHideReadOnly
On Error GoTo NoFileOpened
.ShowSave
strPath = Left(.FileName, Len(.FileName) - Len(.FileTitle))
NoFileOpened:
End With
'
Text1 = strPath ' лучше один раз увидеть чем 100 раз услышать
YesNo = SendMessage(Combo1.hwnd, CB_FINDSTRINGEXACT, -1, strPath)
Text2 = YesNo’смотрим нашлось в комбо или нет
If YesNo = -1 Then 'если в комбо такого нет - добавляем
Combo1.AddItem strPath, 0
Combo1.ListIndex = 0
Else
Combo1.ListIndex = YesNo
End If
End Sub
Несмотря на то что в комбо есть строка совпадающая с полученным из CommonDialog-а strPath-ом SendMessage возвращает 0 (YesNo =0)
Что я не так делаю, подскажите пожалуйста
ЗЫ
Не получается и с CB_FINDSTRINGEXACT и с CB_FINDSTRING
Причём, еслия цепляю на другой баттон:
- Код: Выделить всё
strPath = Text3.Text
YesNo = SendMessage(Combo1.hwnd, CB_FINDSTRINGEXACT, -1, strPath)
ввожу в Text3 строки, которые есть в комбо - всё исправно работает, и если ввожу строку "C:\Users\GiaBer\Desktop\AAA" - тоже нормально находит её в комбо, то есть именно при получении строки из диалого не находит