| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > LB_FINDSTRING |
| Автор: madbizarre 26.10.2010, 22:09 | ||
Копирую в szBuf содержимое Edit1 с дефайном POISK, вроде ка вычитал LB_FINDSTRING должен возвращать номер искомой строки, но у меня почемуто всегда id=-1 в чем ошибка?
|
| Автор: Earnest 27.10.2010, 07:12 |
| Так у тебя лист-вью или лист-бокс? Это таки две большие разницы. LB_FINDSTRING - дли лист-бокса, ListView_SetItemState - для лист-вью. Искать строку в лист вью нужно ручками. |
| Автор: madbizarre 27.10.2010, 17:55 |
| Неподскажешь примерный вид куска текста? Ато алгоритм то я понимаю в целом, а вот вин апи плохо знаю. |
| Автор: BorisVorontsov 27.10.2010, 18:28 |
Глупости, посредством ListView_FindItem |
| Автор: madbizarre 28.10.2010, 12:37 |
| А можно подробное описание этого макроса? Какие параметры и что возвращает? |
| Автор: BorisVorontsov 28.10.2010, 13:09 |
| Описание, как ни странно, здесь: http://msdn.microsoft.com/en-us/library/bb761242.aspx Принимает стартовый индекс и параметры для поиска, а возвращает либо индекс пункта при успешном поиске, либо -1 при неудачном Для того, что бы выполнить поиск по строке, необходимо указать флаг LVFI_STRING и проинициализировать psz строкой для поиска |
| Автор: madbizarre 28.10.2010, 18:06 | ||
Вроде как ты и сказал, а значение всё равно -1 |
| Автор: BorisVorontsov 28.10.2010, 19:00 | ||
Скорее всего, строка не совпадает полностью с текстом пункта.
Для поиска по началу строки необходимо задать флаг LVFI_PARTIAL, о чем довольно ясно написано в MSDN. |
| Автор: madbizarre 28.10.2010, 20:33 | ||
Ты 100% преподователем работаешь
Но вот как его втыркнуть в мой екст программы, до меня ну ни как не доходит. Помоги на примере, если так важно не на моём. Но чтобы я видел наглядно использование этого макроса с этими параметрами, ну ООООЧЕНЬ прошу |
| Автор: BorisVorontsov 28.10.2010, 22:51 | ||
|
| Автор: madbizarre 29.10.2010, 09:01 |
| Спасибо, заработало. Есть еще вопрос, он ищет по 1 столбику, а по другим можно осуществить? |
| Автор: BorisVorontsov 29.10.2010, 12:36 |
Нет, по другим только вручную, посредством перебора подпунктов соответствующей колонки и сравнения с текстом с помощью lstrcmpi/_tcscmpi |
| Автор: madbizarre 29.10.2010, 13:53 |
| А почему от того меняю я значение iStart или нет в макросе ListView_FindItem, у меня всё равно ищет с -1 позиции. Т.е. я столкнулся с такой проблемой, что если у меня в сроках есть два одинаковых наименование, первое встречается на 5 строке, второе встречается на 10, то он ищет только ближнюю, а 10 игнорирует! |
| Автор: BorisVorontsov 30.10.2010, 12:13 |
| А ты правильный стартовый индекс указываешь? |
| Автор: madbizarre 2.11.2010, 08:35 |
| Да я указывая в ручную с 8 индекса получается в 10 строке слово совпадает а строка не выделяется :-( |
| Автор: madbizarre 2.11.2010, 23:23 | ||
Почему не осуществляется последовательный поиск... Если в таблице, существует несколько строк с искомым вариантом, должен выделять при каждом нажатии на ОК, след строку с нужным текстом, но этого не происходит
|
| Автор: Earnest 3.11.2010, 07:52 |
Даже если iStart - статическая переменная и сохраняет свое значение между вызовами, ты всегда начинаешь поиск с найденного прошлый раз элемента. И, соотвественно, находишь именно его. |
| Автор: BorisVorontsov 3.11.2010, 22:18 | ||
Earnest, в MSDN четко написано
|
| Автор: Earnest 4.11.2010, 16:29 |
| Хм... странно, а я вроде всегда считала, что поиск начинается именно с переданного индекса, и вроде оно всегда получалось... Так ведь проверить не сложно. Отладчик в зубы и вперед. А если и вправду все время находится самый первый, так может и нет больше? |