Читая Эпплмана

Пример 2. Быстрый поиск в ListBox.

Для быстрого поиска нам потребуется всего одна API-функция и одна константа.
Создаем новый проект, добавляем в него модуль. С помощью API Text Viewer включаем в данный модуль API-функцию SendMessage и константу LB_FINDSTRINGEXACT. 
СТОП! Функция, сгенерированная нам API Text Viewer не готова к использованию в VB! Исправьте ее, как показано ниже. Для отличия дадим функции другое имя. В причинах этого мы разберемся в следующей статье.
Option Explicit

Public Const LB_FINDSTRINGEXACT = &H1A2
Public Declare Function SendMessageByString Lib "user32" _
    Alias "SendMessageA" _
    (ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As String) _
    As Long

Переходим в форму и располагаем на ней 2 кнопки и ListBox. Первая кнопка заполняет ListBox значениями от 1 до 500
Private Sub Command1_Click()
Dim x%
    For x = 1 To 500
        List1.AddItem "Содержимое строки =" + Str$(x)
    Next
End Sub

С помощью второй кнопки осуществляем непосредственно поиск:
Private Sub Command2_Click()
Dim hw&, t&
    hw = List1.hwnd
    t = SendMessageByString(hw, LB_FINDSTRINGEXACT, -1, "Содержимое строки = 200")
    MsgBox "Искомая запись имеет ListIndex = " + Str$(t&)
End Sub

О чем умолчал Эпплман? Оказывается, все вышесказанное вполне применимо и к ComboBox. Вся разница заключается лишь в константе. Сделайте запись в модуле
Public Const CB_FINDSTRINGEXACT = &H158
и поэкспериментируйте с ComboBox

Рассмотрим практическое применение. Добавим на форму TextBox. В свойство Text введем "Содержимое строки = ". Все дело в том, что данная функция осуществляет поиск с начала строки и чтобы не повторяться будем просто дописывать цифры.
Private Sub Text1_Change()
Dim hw&
    hw = List1.hwnd
    List1.ListIndex = SendMessageByString(hw, LB_FINDSTRINGEXACT, -1, ByVal CStr(Text1.Text))
End Sub

Запустите программу и после заполнения ListBox значениями, попробуйте дописать в текстовое поле цифры. Будет происходить позиционирование на первом найденном значении.

 
Назад Далее Скачать пример

Hosted by uCoz