
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.198] |
![]() |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток!
Снова я с занудными вопросами по окнах... Есть программка. На ней ListBox. Эта программка представляет с себя маленький терманальчик, в которот отслеживается деятельность работы приложения... Туда заносятся данные примерно следующего характера: Тоесть сначала идет дата, потом описание сообытия. Нужно просмотривать все события (ну, скорей всего последнее в списке) и если там будет ошибка, то вызывать соответствующую функцию. Список с ошибками заранее известен! ![]() Накопал примерчик: ![]() ![]() Const LB_FINDSTRING = &H18F Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long Private Sub Form_Load() List1.Clear List1.AddItem "Apples" List1.AddItem "Banana" List1.AddItem "Bread" List1.AddItem "Break" Text1.Text = "" End Sub Private Sub Text1_Change() List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal Text1.Text) End Sub При изменении значения TextBox - в списке выбирается нужное значение. Ищется оно, как видите по hwnd. hwnd ListBox-а нам известно. Но он ищет только полные названия строки или с текст, с которой строка начинается. Как его можно сделать по маске типа: "*ошибка*", что бы можно было выбирать любое сочетание символов для поиска? Заранее благодарен ![]() |
Сообщ.
#2
,
|
|
|
Цитата DataKill @ Как его можно сделать по маске типа: "*ошибка*", что бы можно было выбирать любое сочетание символов для поиска? C автопоиском по LB_FINDSTRING - никак. Можно отслеживать кол-во строк в листбоксе по LB_GETCOUNT и если оно увеличилось, то читать в цикле все добавленные строки по LB_GETTEXT и уже самому смотреть, есть ли в них "заветное слово" ![]() |
Сообщ.
#3
,
|
|
|
Окай, нашел пример, запустил в отдельной программе. Все работает.
Пробую цеплять на свою и ничего толкового не получается.... %) Код в моей программе: ![]() ![]() Public Function GetListBoxItems(ByVal hWnd As Long) As String Dim lCount As Long, lIndex As Long Dim sItem As String, lLen As Long lCount = SendMessage(hWnd, LB_GETCOUNT, 0&, ByVal 0&) lLen = SendMessage(CLng(hWnd), LB_GETTEXTLEN, ByVal CLng(lCount) - 1, ByVal CLng(0)) ' sItem = Space(lLen) ' Call SendMessage(hWnd, LB_GETTEXT, lCount - 1, ByVal sItem) GetListBoxItems = sItem End Function SendMessage(hWnd, LB_GETTEXT, lCount - 1, ByVal sItem) возвращает -1 sItem = "N-ое коли-во пробелов" (Пустой буфер) |
Сообщ.
#4
,
|
|
|
Перед Call SendMessage опустил:
![]() ![]() sItem = Space(lLen) |
Сообщ.
#5
,
|
|
|
Буфер я забыл добавить в пост на форуме. В коде он у меня есть... Это я эксперементировал
![]() Но даже с ним ничего не работает. Все как было, так и есть, а sItem по прежнему возвращает пустой буфер |
Сообщ.
#6
,
|
|
|
Решенно
![]() Нужно было написать: ![]() ![]() call SendMessage(hWnd, LB_GETTEXT, ByVal lCount - 1, ByVal sItem) |
Сообщ.
#7
,
|
|
|
Цитата DataKill @ Но даже с ним ничего не работает. Все как было, так и есть, а sItem по прежнему возвращает пустой буфер Не может быть. А у меня работает без ByVal. Я думаю что, ты первый раз не добавил sItem = Space(lLen), и по этому код не работало. |
Сообщ.
#8
,
|
|
|
Как я уже только не пробывал )))))
И с sItem = Space(lLen), и без него, получилось так как написал выше ![]() |